1.常量
在类外定义常量,用define;在类内定义常量有const。
2.类访问与对象访问
凡是 需要通过 类来访问的资源,都可以使用范围解析操作符,即一对冒号 ::。以常量为例(常量又称类常量),访问常量:类名::常量;
而箭头 -> 是对象访问对象成员的操作符。
3.关键字
this,self,static(这三个关键字都只能用于类内)
访问对象的属性和方法,用this关键字,$this->属性名,$this->方法名。
访问类中的常量,用self关键字,self::常量名,当然也可以用类名::常量名。
static用于定义类中的静态属性和静态方法。访问静态属性与访问类常量一样,有两种方法。
类名::$静态变量名;self::$静态变量名(注意$符号不要漏了,这是与访问类常量不同的一点,静态属性的值是允许改变的)
注意:无论是哪个属性和方法,只要是属于类的,那就需要去用类访问(类名访问),当然在类内是可以用self代替的,对象是不可以的。
例如:
<?php
class Computer{
public $name =20;
public static $age=10;
}
$note = new Computer();
echo $note->age;//这样做程序时会报错的,因为静态成员是属于类成员
?>
4.克隆
我们知道通过=复制,传递的是一个引用,并不会产生新的对象,那么除了通过new关键字来生成一个对象,我们还可以通过克隆的方法来产生一个对象。语法非常的简单:
新对象 = clone 旧对象;
PHP得到新对象的方法:
New 通过类得到对象 实例化
Clone 通过已有对象得到对象 克隆
5.魔术方法
什么魔术方法了?
不需要自动调用,在某些特定情况下系统自动调用的方法,称为魔术方法。特征是方法名都以__开头!
1)构造方法 __construct()
在实例化时被自动实例化好的对象调用。
2)克隆 __clone()在克隆时,自动执行,在克隆时,不会触动构造方法。
注意:克隆也是由对象调用,所以克隆方法里面也可以使用this关键字,是由克隆出来的新对象调用克隆方法,那么this关键字代替的是克隆出来的对象。并且在克隆的过程中是不会触动(调用)构造方法的。
3)析构方法 __destruct()
虽然脚本运行结束后,php会自动释放资源,但是在做一些大型的项目的时候,很多时候,如果大量资源已经没有用时,为了节省空间,就需要提前释放资源,这个时候我们的析构方法就起作用了。
析构函数在类实例的引用失效时、对象被销毁、超出作用域、以及任意关闭序列时,将被调用。 注意:当子类定义了自己的析构函数,需要使用parent::__destruct()来调用父类的析构函数,如果子类没有显式的定义构造函数,那么子类将继承父类的构造函数,并直接运行。
4)__sleep()
序列化时执行的魔术方法
该方法,会返回一个数组,数组内的每一个元素是一个当前对象的属性名。凡是出现在数组内的元素,所代表的属性 都会被保存。
5)__wakeup()
反序列化时执行的魔术方法
该方法,对不能序列化保存的数据进行重新初始化。
6)__autoload()
当程序需要某个类(实例化时,反序列化),如果当前程序没有载入相关类,会自动地调用程序中的函数(__autoload)来完成类文件的加载。__autoload函数虽然会自动调用,但是需要手动定义。此函数需要接收一个参数,为当前需要的类名。
注意,__autoload()函数,即使执行,也不能自动加载类文件,需要我们在函数内,利用include系列代码完成。因此 autoload只是一个加载类文件的时机。因此在 此函数内,应该通过 得到的类名,得到需要加载的类文件才可以。
例如:
<?php
sql = new Mysql();
/*一下代码将会自动调用执行*/
function __autoload($className){
include $className.".class.php";
}
?>
Tip:因此 自动加载的大前提,一定能通过 类名 计算出 文件名才可以!
6.abstract
用于定义抽象类和抽象方法,不能被实例化。
对于抽象类需要注意的是:一个抽象类,除列可以拥有抽象方法外(至少含有一个抽象方法),还可以存在普通成员。
7.implements
继承接口的时候需要用到这个关键字。关于接口,接口里面的方法全都是抽象并且是公开的,接口中也能定义数据,但必须是常量,换一种说法就是接口中只能定义常量和抽象方法。还有接口不是类,它和类不是同一个概念。
可以通过下面两个函数验证:
Class_exists();此函数 可以 检测一个类是否存在!
Interface_exists();判断接口是否存在!