PHP类中常见的关键字和魔术方法

zxh5566  2016-07-13 05:55   Hits: 

1、final关键字的应用
在PHP5中新增加了final关键字,它可以加在类或类的方法前,但不能使用其标识成员属性,虽然final有常量的意思,但在
 
php中定义常量是使用define()函数来完成,在类中将成员属性声明为常量也有专门的方式,final的作用如下
 
使用final标识的类,不能被继承
在类中使用final标识的成员方法,在子类中不能被继承
 
2、static关键字
使用static关键字可以将类中成员标识为静态的,既可以用来标识成员属性也可以标识成员方法。普通会员作为对象属性存
 
在,static成员是作为整个类的属性存在,如果将属性使用static关键字标识,则不管通过类创建多少个对象,这个static
 
成员总是唯一存在的,在多个对象之间共享,因为使用static标识的成员时属于类的,所以与对象实例和其他的类无关,类
 
的静态属性非常类似于函数的全局变量,类中的静态成员时不需要对象而使用类名来直接访问的,格式如下
 
类名::静态成员属性
类名::静态成员方法
 
在类中声明的成员方法中,也可以使用关键字"self"来访问其他静态成员,因为静态成员时属于类的,而不属于任何对象,
 
所以你不能用$this来引用它,而在php中给我们提供的self关键字,就是在类的成员方法中用来代表本类的关键字。
 
如果在类的外部访问类中的静态成员可以使用对象引用和使用类名访问,但通常选择使用类名访问,如果在类内的成员方法
 
中访问静态成员,通常使用self的形式去访问,最好不要直接使用类名称,另外使用静态方法时要注意,在静态方法中只能
 
访问静态成员,因为非静态成员必须通过对象的引用才能访问,通常是$this完成的,而静态的方法在对象不存在的情况下夜
 
可以直接使用类名来访问,没有对象也就没有$this引用,没有了$this引用就不能访问类中的非静态成员,但是可以使用类
 
名或self在非静态方法中访问静态成员
 
3、const关键字
 
在php中定义常量是通过调用define()函数完成,但要将类中的成员属性定义为常量则只能使用const关键字,将类中的成员
 
属性使用const关键字标识为常量。其访问的方式和静态成员一样,都是通过类名或在成员方法中使用self关键字访问,也不
 
能用对象来访问,标识为常量的属性是只读的,不能重复赋值,如果在程序中试图改变它的值,则会出现错误,所以在声明
 
常量时一定要给初值,因为没有其他方式后期为常量赋值。注意使用const声明的常量名称前不能带$符号,而且常量名通常
 
都是大写的。
 
4、克隆对象
 
php5中的对象模型是通过引用来调用对象,但有时需要建立一个对象的副本,改变原来对象时候不希望影响到副本,如果使
 
用new关键字重新创建对象,再为属性赋值,这样会比较繁琐,在PHP中可以根据现有的对象克隆出一个完全一样的对象,克
 
隆以后,原本和副本两个对象完全独立互不干扰。在PHP5中使用clone关键字克隆对象。clone出来的两个对象完全独立,但
 
他们的成员及成员方法完全一样。如果需要在克隆的时候重新为成员属性赋值,则可以在类中声明一个魔术方法__clone()。
 
该方法是在对象克隆时自动调用的,所以就可以通过此方法为克隆后的副本从新初始化。__clone()不需要参数,该方法自动
 
包含$this,$that两个对象的引用,$this是副本对象的引用,$that是原来对象的引用。
 
5、类中通用方法__toString()
 
魔术方法__toString()是快速获取对象的字符串表示的最便捷方式,它是在直接输出对象引用时自动调用的方法,通过前面
 
的介绍,对象引用时一个指针,即存放对象在堆内存中的首地址的变量,如果直接使用 echo输出对象,则会报错。如果在类
 
中添加了__toString()方法,则直接输出该方法中定义的字符串,通常该方法返回的字符串是使用类中多个属性连接而成。
 
6、__call()处理错误调用
 
在调用对象中不存在的方法时候会出现系统报错,然后程序退出不能继续执行,如果在类中添加一个魔术方法__call(),则
 
调用对象中不存在的方法会自动调用这个方法,并且程序可以继续执行。__call()需要两个参数,第一个参数是调用不存在
 
的方法时,接收这个不存在方法的方法名,并将这个不存在的方法中,使用的参数列表形成数组传给__call()方法中的第二
 
个变量。
 
7、自动加载类
在设计面向对象的程序开发时候,通常为每个类的定义都单独建立一个PHP源文件,当你尝试使用一个未定义的类时,PHP会
 
报致命错误,可以用include包含一个类所在的源文件,毕竟你知道要用到哪个类,如果一个页面需要使用多个类,就不得不
 
在脚本页面开头编写一个长长的包含文件的列表,将本页面需要的类全部包含进来,这样处理不仅繁琐而且易错。
PHP提供了自动加载类,当尝试加载某个类时,会寻找__autoload()全局函数,如果存在该函数,PHP会用一个参数来调用它
 
,参数即类名
上一篇:Linux下光驱挂载与卸载以及解决取消挂载时的De
下一篇:PDO介绍和安装