php类和对象(二)
2012-12-25 00:00
253 查看
类常量:类常量可以看成是一个有前缀的常量,类名是前缀,用的时候和类变量一样
构造函数:构造函数可以这么说是类实例最早运行的函数,构造函数可以用__construct 或者类名 来定义,但是现在来说还是用前者吧,后者到最后不知道会不会被淘汰;
析构函数:析构函数是在实例被删除的时候被调用的函数;不要在析构函数中抛出一个异常,否则会导致致命错误。
我们来看看下面的例子
抽象类:抽象类,就相当于比类更加高一层的东西。比如你的说动物,动物描述的是一个种类,而不是具体的某个动物。这个就可以定义为抽象类。抽象类不能直接被实例化,你必须先继承该抽象类,然后再实例化子类。抽象类中 至少要包含一个抽象方法。如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现。继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法;如果抽象类中某个抽象方法被声明为protected,那么子类中实现的方法就应该声明为protected或者public,而不 能定义为private。
接口:接口和抽象类有点相似,只是他是功能性的,抽象类有点父子的关系,接口类有点象功能集合。电灯有发光的功能,蜡烛也有。看下面的例子
你可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
我们可以通过interface来定义一个接口,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法都必须是public,这是接口的特性。
要实现一个接口,可以使用implements操作符。类中必须实现接口中定义的所有方法,否则 会报一个fatal错误。如果要实现多个接口,可以用逗号来分隔多个接口的名称。
魔术方法:PHP把所有以__(两个下划线)开头的类方法当成魔术方法。所以你定义自己的类方法时,不要以 __为前缀。
__sleep 和 __wakeup:serialize() 函数会检查是否存在一个魔术方法 __sleep.如果存在,__sleep()方法会先被调用, 然后才执行序列化操作。与之相反,unserialize()会检查是否存在一个__wakeup方法。如果存在,则会先调用 __wakeup方法,预先准备对象数据。
__toString:__toString 方法可以让一个类决定它如何转换成一个字符串。
__invoke:当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。
__set_state:当调用var_export()时,这个静态 方法会被调用
final:如果父类中的方法被声明为final,则子类无法覆盖该方法; 如果一个类被声明为final,则不能被继承。
对象比较:当使用对比操作符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。而如果使用全等操作符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。
本文固定链接: http://www.qaforcode.net/archives/270 | 猪哥每日一贴
构造函数:构造函数可以这么说是类实例最早运行的函数,构造函数可以用__construct 或者类名 来定义,但是现在来说还是用前者吧,后者到最后不知道会不会被淘汰;
析构函数:析构函数是在实例被删除的时候被调用的函数;不要在析构函数中抛出一个异常,否则会导致致命错误。
我们来看看下面的例子
01 | class Zhuge{ |
02 | public $name; |
03 | function __construct($name){ |
04 | $this->name = $name; |
05 | echo "我是构造函数,我属于".$this->name."!qaforcode.net\n"; |
06 | } |
07 | function __destruct(){ |
08 |
09 | echo "我是析构函数,我属于".$this->name."!qaforcode.net\n"; |
10 | } |
11 | } |
12 |
13 | $a = new Zhuge("猪哥"); |
14 | unset($a);//试试注释掉这行看看效果 |
15 | $b = new Zhuge("猪哥疼你"); |
01 | abstract class Animal{ |
02 |
03 | abstract public function eat(); |
04 | } |
05 |
06 | class Cat{ |
07 | public function eat(){ |
08 | echo "I'm eating;"; |
09 | } |
10 | } |
11 |
12 | //$a = new Animal();会出错 |
13 | $black_cat = new Cat(); |
14 |
15 | $black_cat->eat(); |
01 | interface Light{ |
02 |
03 | public function turnoff(); |
04 | public function turnon(); |
05 | } |
06 |
07 | class ElectricLight implements Light{ |
08 |
09 | public function turnoff(){ |
10 | echo "turnoff by touch switch\n"; |
11 | } |
12 | public function turnon(){ |
13 | echo "turnon by touch switch\n"; |
14 | } |
15 |
16 | } |
17 | class Candle implements Light{ |
18 |
19 | public function turnoff(){ |
20 | echo "turnoff by blow\n"; |
21 | } |
22 | public function turnon(){ |
23 | echo "turnon use match\n"; |
24 | } |
25 |
26 | } |
27 | $electriclight = new ElectricLight(); |
28 | $candle = new Candle(); |
29 | $electriclight->turnoff(); |
30 | $candle->turnoff(); |
我们可以通过interface来定义一个接口,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法都必须是public,这是接口的特性。
要实现一个接口,可以使用implements操作符。类中必须实现接口中定义的所有方法,否则 会报一个fatal错误。如果要实现多个接口,可以用逗号来分隔多个接口的名称。
魔术方法:PHP把所有以__(两个下划线)开头的类方法当成魔术方法。所以你定义自己的类方法时,不要以 __为前缀。
__sleep 和 __wakeup:serialize() 函数会检查是否存在一个魔术方法 __sleep.如果存在,__sleep()方法会先被调用, 然后才执行序列化操作。与之相反,unserialize()会检查是否存在一个__wakeup方法。如果存在,则会先调用 __wakeup方法,预先准备对象数据。
__toString:__toString 方法可以让一个类决定它如何转换成一个字符串。
__invoke:当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。
__set_state:当调用var_export()时,这个静态 方法会被调用
final:如果父类中的方法被声明为final,则子类无法覆盖该方法; 如果一个类被声明为final,则不能被继承。
对象比较:当使用对比操作符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。而如果使用全等操作符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。
01 | class A{ |
02 | public $name; |
03 |
04 | function __construct($name){ |
05 |
06 | $this->name = $name; |
07 | } |
08 | function getName(){ |
09 |
10 | return $this->name; |
11 | } |
12 |
13 | } |
14 | $a = new A("趴树上的猪"); |
15 | $b = new A("趴树上的猪"); |
16 | $c = $a; |
17 |
18 | var_dump($a==$b); |
19 | var_dump($a===$b); |
20 | var_dump($a==$c); |
21 | var_dump($a===$c); |
相关文章推荐
- php类和对象(一)
- PHP类实例教程(二):类和对象的基础部分
- php类和对象: clone 克隆
- [php_03]php类与对象
- php类与对象的基本概念
- php类与对象的基本语法
- 将对象转为数组方法:延伸array_map函数在PHP类中调用内部方法
- php笔记(二)PHP类和对象之Static静态关键字
- PHP类与对象 final static const abst aa90 ract 关键字
- php类和对象(一)
- PHP类实例教程(五):对象的比较
- PHP类与对象中的private访问控制的疑问
- php类和对象
- PHP类和对象相关系统函数与运算符小结
- php类与对象之后期静态绑定
- PHP类和对象
- PHP类与对象中的private访问控制的疑问
- php类和对象学习
- PHP类和对象等代码说明