1.声明一个类

在php中使用class关键字创建一个新类,类包括属性与方法。语法格式如下:

  1. <?php
  2. class类名{
  3. 属性;
  4. 方法;
  5. }
  6. ?>

2.创建一个实例对象

创建对象的过程称为实例化,对象被创建时就包含3个特性:对象句柄,对象属性,对象方法;

对象句柄:用于区分不同的对象。对象创建好了就会获取一块存储空间,存储空间的地址即为对象的标识,也就是对象的句柄。

对象属性:用于描述对象的静态特征。

对象方法:用于描述对象的动态特征。

如果要创建一个新的且唯一的对象,可使用'&'引用符号。例如:

  1. <?php
  2. $对象名称 = new &类名称();
  3. ?>

当类实例化后,可以使用操作符'->'来调用对该对象的属性和方法。

3.类的属性与方法

属性的声明:关键字成员变量名;

关键字可以是public,private,protected,static中的任意一个,默认是public。

4.类的常量

常量使用const关键字来定义一个类的常量。类常量不与这个类的任何特定实例相关联,所以不可以使用间接引用操作符来访问它们。类常量通常要大写,如果多个类常量由多个单词组成,建议使用下划线将它们分开。

5.类的构造方法和析构方法

构造方法:一个类中只能有一个构造方法,构造方法不会被调用,只有在使用new关键字创建对象的时候才会调用构造方法。

例如:

  1. <?php
  2. class类名{
  3. function__construct(){
  4. 初始化语句;
  5. }
  6. }
  7. ?>

在工作中,也可以调用和实例化对象没有任何关系的类构造函数,只须在__construct前面加上类名,例如:类名::__construcr();

析构方法:析构方法与构造方法是相对的,它在某个对象中的所有引用都被删除或对象被显式销毁时执行。

例如:

  1. <?php
  2. class类名{
  3. function __destruct(){
  4. 初始化语句;
  5. }
  6. }
  7. ?>

脚本执行结束时,PHP会撤销内存中的所有对象,因此,如果实例化的类和实例时创建的信息都留在内存中,就不需要显示地声明析构函数。但是,如果实例化时创建了不容易丢失的数据,就应该在对象撤销时撤销这些数据,因此就需要定制析构函数。

6.静态属性与方法

将类中的属性与方法声明为静态的就叫做静态方法。静态方法不受任何具体对象的限制,所以不需要建立实例就可以直接引用类中的静态方法。

调用方式:类名称::静态方法名称

注释:'::'符号称为范围解析操作符,它可以用于访问静态成员,静态方法和常量,还可以用于覆盖类中的成员和方法。例如:

  1. <?php
  2. class sta_num{
  3. static$num=0;
  4. }
  5. sta_num::$num++;
  6. ?>

如果想在同一类的成员方法中访问静态属性,可以通过在该静态属性的名称前加上操作符'self::'来实现。

例如:

  1. <?php
  2. class sta_num{
  3. static$num=0;
  4. function add(){
  5. self::$num++;
  6. }
  7. }
  8. sta_num::$num++;
  9. ?>

7.对象的克隆

通过clone后可以得到的对象与原来的对象没有任何关系,它把原来对象的所有信息从内寻的位置中复制了一份,然后在内存中又开辟一个空间来存储克隆后的对象。例如:

  1. <?php
  2. calss a{}
  3. $ojectA= new a();
  4. $objectB= clone $objectA;
  5. ?>

如果在对象中定义了_clone方法,则可以在对象被克隆时来调整克隆行为,此方法的代码将在克隆的操作期间来执行。

8.继承

在PHP中,使用extends关键字来建立一个类的继承。格式如下:

  1. class 子类名称 extends 父类名称{
  2. 子类属性;
  3. 子类方法;
  4. }

当子类要调用父类的成员方法时需要用到关键字'patent::',例如:

parent::父类的成员方法

9.检测对象的类型

在php中可以使用instanceof运算符来检测当前对象是否属于同一个类。

10.多态

(1)通过继承抽象类实现多态

抽象类里面至少包含一个由关键字abstract修饰的抽象方法,抽象方法是不实现具体方法的空方法。抽象类不能被实例化,只能由子类去继承,然后在继承的子类中完成具体功能。

例如:

  1. <?php
  2. abstract class work{
  3. abstract function work_name($name);
  4. }
  5. class man extends work{
  6. function work_name($name){
  7. echo$name.'is true';
  8. }
  9. }
  10. class woman extends work{
  11. function work_name($name){
  12. echo $name.'is false';
  13. }
  14. }
  15. ?>

对于work类而言man,woman就是它多态的表现。

(2)通过接口实现多态

接口是一组成员方法声明的集合,它只包含一些空的成员方法或常量,这些空的成员方法将由实现该接口的类去实现。定义一个接口需要使用interface声明,定义接口的方法如下:

  1. interface 接口名称{
  2. 类常量;
  3. function 成员方法_1;
  4. function 成员方法_2;
  5. }

在接口中不存在构造方法和析构方法,接口可以被继承,它可以继承多个接口,而不能继承一个类。接口的实现需要使用关键字implements。当使用类来实现接口时,必须包含接口定义的所有方法,否则在运行时会出现错误。例如:

  1. <?php
  2. interface people{
  3. function favourate_sport();
  4. }
  5. class  children implements people{
  6. function favourate_sport(){
  7. 方法体;
  8. }
  9. }
  10. class student implements people{
  11. function favourate_sport(){
  12. 方法体;
  13. }
  14. }
  15. ?>

对于接口people而言,类children和student就是其多态的表现。

    1. <pre name="code" class="php"><pre name="code" class="php"><p class="cjk" style="margin-bottom:0cm" align="LEFT"></p></pre>
    2. <pre></pre>
    3. <pre></pre>
    4. <pre></pre>
    5. <pre></pre>
    6. </pre>

php面向对象编程--学习笔记的更多相关文章

  1. JavaScript面向对象编程学习笔记

    1  Javascript 面向对象编程 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例 ...

  2. PyTorch框架+Python 3面向对象编程学习笔记

    一.CNN情感分类中的面向对象部分 sparse.py super(Embedding, self).__init__() 表示需要父类初始化,即要运行父类的_init_(),如果没有这个,则要自定义 ...

  3. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  4. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

  5. DirectX 11游戏编程学习笔记之8: 第6章Drawing in Direct3D(在Direct3D中绘制)(习题解答)

            本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com         注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候 ...

  6. 多线程编程学习笔记——async和await(一)

    接上文 多线程编程学习笔记——任务并行库(一) 接上文 多线程编程学习笔记——任务并行库(二) 接上文 多线程编程学习笔记——任务并行库(三) 接上文 多线程编程学习笔记——任务并行库(四) 通过前面 ...

  7. 多线程编程学习笔记——async和await(二)

    接上文 多线程编程学习笔记——async和await(一) 三.   对连续的异步任务使用await操作符 本示例学习如何阅读有多个await方法方法时,程序的实际流程是怎么样的,理解await的异步 ...

  8. 多线程编程学习笔记——async和await(三)

    接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五.   处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...

  9. 多线程编程学习笔记——使用异步IO(一)

    接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...

随机推荐

  1. 【26】Remove Duplicates from Sorted Array

    [26]Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such th ...

  2. ArrayList 、Vector、 LinkList

    public class TestList {     public static void init(List list)     {         if(list!=null)          ...

  3. “VICUTU威克多”高档男装

    "VICUTU威克多"高档男装   北京威克多制衣中心是一家从事高档男装设计.制造和销售为一体的股份服装企业.主要经营品牌为"VICUTU"男装系列,主导产品为 ...

  4. J2EE 关于WebLogic下应用使用URL.openConnection获取连接返回 HttpsURLConnection与SOAPHttpsURLConnection的问题

    J2EE 关于WebLogic下应用使用URL.openConnection获取连接返回 HttpsURLConnection与SOAPHttpsURLConnection的问题 2012年03月09 ...

  5. Java 流的概述及操作(转)

    一.什么是流? 流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,流机制是Java及C++中的一个重要机制,通过流我们可以自由地控制文件.内存.IO设备等数据的流向. ...

  6. dubbo服务+Spring事务+AOP动态数据源切换 出错

    1:问题描述,以及分析 项目用了spring数据源动态切换,服务用的是dubbo.在运行一段时间后程序异常,更新操作没有切换到主库上. 这个问题在先调用读操作后再调用写操作会出现. 经日志分析原因: ...

  7. HTTP协议和WEB应用

    一.应用层协议原理 1.套接字(Socket):主机地址+端口地址.(通常为32位IP地址和16位端口号组成,总长度为48位) 2.进程通过套接字来接收和发送报文.因特网运输层将所提供的服务整合成两种 ...

  8. android设置view透明度的效果

    android设置view透明度的效果 推荐textView.setBackgroundColor(Color.TRANSPARENT);     第一种方法:在xml文件中设置背景颜色. andro ...

  9. [ES6] Array.findIndex()

    In es5, you can use indexOf to get the index of one item in an array. In es6, you can use findIndex( ...

  10. 《Android开发艺术探索》读书笔记 (9) 第9章 四大组件的工作过程

    第9章 四大组件的工作过程 9.1 四大组件的运行状态 (1)四大组件中只有BroadcastReceiver既可以在AndroidManifest文件中注册,也可以在代码中注册,其他三个组件都必须在 ...