访问修饰符:默认为public。private修饰的属性和方法只能在类的内部进行访问,且不会被继承。protected修饰的属性和方法则会被继承。
注:属性的修饰符public不能省略,必须显示修饰。
子类调用父类的被重载的函数:parent::funName(); 此时,如果该方法中使用的属性或方法被子类重载了,则使用子类的属性值或方法。
final:修饰一个函数,可以禁止该函数被子类重载。修饰一个类,可以禁止该类被继承。final无法修饰变量。
PHP不支持多继承。但可以实现多个接口。
const变量:相当于java中的静态变量。用双冒号访问。
static:可以修饰方法,表示静态方法。与java中的静态方法一样。用双冒号访问。
instanceof:检测一个对象的类型。
如果要求某个参数必须是类A的实例或其子类的实例,可如下定义:
function funName(A $a){}
延迟静态绑定:PHP 5.3引入。该特性允许在一个静态继承的上下文中对一个被调用类的引用。父类可以使用子类重载的静态方法。
克隆对象:$c = clone $b。可以定义__clone()方法来自定义所需要的确切复制行为。
抽象类:使用关键字abstract修饰。
使用__call()重载方法,如下:
class A { function displayArray($arr) { print_r($arr);nl(); }
function displayScalar($a,$b) { echo "a=$a,b=$b<br>"; }
function __call($method,$p) { if($method=="display") { if(is_array($p[0])) { $this->displayArray($p[0]); }else { $this->displayScalar($p[0]); } } } } |
此时,类A可以不用实现display()方法。
__autoload():不是类方法,是一个单独的函数;即可以在任何类声明之外声明这个函数。如果实现了该函数,它将在实例化一个还没有被声明的类时自动调用。
可以使用foreach()通过循环方式取出一个对象的所有public属性。
如果需要一些更加复杂的行为,可以实现一个iterator。要实现一个迭代器,必须将要迭代的类实现IteratorAggregate接口,并且定义一个能够返回该迭代类实例的getIterator方法。这个类必须实现Iterator接口,该接口提供了一系列必须实现的方法。
__toString():使用echo打印某个类的对象时,会调用该方法。
反射Reflection:http://blog.csdn.net/hguisu/article/details/7357421