php面向对象编程--学习笔记

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.  $ojectAnew 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类而言manwoman就是它多态的表现。

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而言,类childrenstudent就是其多态的表现。

    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.   
    7. </pre> 
posted @ 2014-04-23 13:18  timelesszhuang  阅读(248)  评论(0编辑  收藏  举报