类常量:类常量能够当作是一个有前缀的常量,类名是前缀,用的时候和类变量同样 函数
构造函数:构造函数能够这么说是类实例最先运行的函数,构造函数能够用__construct 或者类名 来定义,可是如今来讲仍是用前者吧,后者到最后不知道会不会被淘汰; this
析构函数:析构函数是在实例被删除的时候被调用的函数;不要在析构函数中抛出一个异常,不然会致使致命错误。 spa
咱们来看看下面的例子 .net
03 |
function __construct($name){ |
05 |
echo "我是构造函数,我属于".$this->name."!qaforcode.net\n"; |
07 |
function __destruct(){ |
09 |
echo "我是析构函数,我属于".$this->name."!qaforcode.net\n"; |
14 |
unset($a);//试试注释掉这行看看效果 |
15 |
$b = new Zhuge("猪哥疼你"); |
抽象类:抽象类,就至关于比类更加高一层的东西。好比你的说动物,动物描述的是一个种类,而不是具体的某个动物。这个就能够定义为抽象类。抽象类不能直接被实例化,你必须先继承该抽象类,而后再实例化子类。抽象类中 至少要包含一个抽象方法。若是类方法被声明为抽象的,那么其中就不能包括具体的功能实现。继承一个抽象类的时候,子类必须实现抽象类中的全部抽象方法;若是抽象类中某个抽象方法被声明为protected,那么子类中实现的方法就应该声明为protected或者public,而不 能定义为private。 code
01 |
abstract class Animal{ |
03 |
abstract public function eat(); |
07 |
public function eat(){ |
12 |
//$a = new Animal();会出错 |
13 |
$black_cat = new Cat(); |
接口:接口和抽象类有点类似,只是他是功能性的,抽象类有点父子的关系,接口类有点象功能集合。电灯有发光的功能,蜡烛也有。看下面的例子 对象
03 |
public function turnoff(); |
04 |
public function turnon(); |
07 |
class ElectricLight implements Light{ |
09 |
public function turnoff(){ |
10 |
echo "turnoff by touch switch\n"; |
12 |
public function turnon(){ |
13 |
echo "turnon by touch switch\n"; |
17 |
class Candle implements Light{ |
19 |
public function turnoff(){ |
20 |
echo "turnoff by blow\n"; |
22 |
public function turnon(){ |
23 |
echo "turnon use match\n"; |
27 |
$electriclight = new ElectricLight(); |
28 |
$candle = new Candle(); |
29 |
$electriclight->turnoff(); |
你能够指定某个类必须实现哪些方法,但不须要定义这些方法的具体内容。 继承
咱们能够经过interface来定义一个接口,就像定义一个标准的类同样,但其中定义全部的方法都是空的。 接口
接口中定义的全部方法都必须是public,这是接口的特性。 字符串
要实现一个接口,可使用implements操做符。类中必须实现接口中定义的全部方法,不然 会报一个fatal错误。若是要实现多个接口,能够用逗号来分隔多个接口的名称。 get
魔术方法:PHP把全部以__(两个下划线)开头的类方法当成魔术方法。因此你定义本身的类方法时,不要以 __为前缀。
__sleep 和 __wakeup:serialize() 函数会检查是否存在一个魔术方法 __sleep.若是存在,__sleep()方法会先被调用, 而后才执行序列化操做。与之相反,unserialize()会检查是否存在一个__wakeup方法。若是存在,则会先调用 __wakeup方法,预先准备对象数据。
__toString:__toString 方法可让一个类决定它如何转换成一个字符串。
__invoke:当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。
__set_state:当调用var_export()时,这个静态 方法会被调用
final:若是父类中的方法被声明为final,则子类没法覆盖该方法; 若是一个类被声明为final,则不能被继承。
对象比较:当使用对比操做符(==)比较两个对象变量时,比较的原则是:若是两个对象的属性和属性值 都相等,并且两个对象是同一个类的实例,那么这两个对象变量相等。而若是使用全等操做符(===),这两个对象变量必定要指向某个类的同一个实例(即同一个对象)。
04 |
function __construct($name){ |
本文固定连接: http://www.qaforcode.net/archives/270 | 猪哥每日一贴