抽象类 至少一个抽象方法,不能实例化
abstract class A{ abstract protected function getValue(); }
class B extends A{ public function getValue($v=null){...} } 可见性不能更严格
接口 全都是抽象方法
interface a{ public function aaa(); } //接口里必须为public,可以使用常量
interface b{ public function bbb(); }
interface c extends a,b { public function ccc(); } //接口可以 extends
class d implements c{
public function aaa(){...}
public function bbb(){...}
public function ccc(){...}
}
trait a{ function foo(){} }
class b{ use a; }
类常量:const a=1; self::a,ClassName::a,$Obj::a 没有$,
静态属性:static $a=1; self::$a,ClassName::$a,$Obj::$a
$this->a self::a parent:: static::
Final:父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
比较: == 两个对象是同一个类的实例,且属性和属性值都相等。
===两个对象变量指向同一个对象
遍历:foreach可遍历所有可见属性
对象引用:
$a = new A(); // a指向p,p指向new出来的对象
$b = $a; // b指向q,q的值和p相同,
$c =& $a; // c指向p
后期静态绑定 static写在父类里,子类继承后,static指向的是子类
__construct(), __destruct(), //构造和析构时
__isset(), __unset(), //对不可访问的属性调用isset()、empty()、unset()
__get(), __set(), //读、写不可访问的属性
__call(), __callStatic(), //调用不可访问的方法时
__sleep(), __wakeup(), //serialize() 和 unserialize() 时
__toString(), //把对象当作字符串时,例如echo $a
__clone() , //$b=clone $a时,$b会执行__clone()
__invoke(), //把对象当作函数使用时,$a(123);
__set_state(), __debugInfo() //var_export() 和var_dump() 时
__autoload — 尝试加载未定义的类
call_user_method_array — 以参数列表的数组,调用用户方法
call_user_method — 对特定对象调用用户方法
class_alias — 为一个类创建别名
class_exists — 检查类是否已定义
get_called_class — 后期静态绑定("Late Static Binding")类的名称
get_class_methods — 返回由类的方法名组成的数组
get_class_vars — 返回由类的默认属性组成的数组
get_class — 返回对象的类名
get_declared_classes — 返回由已定义类的名字所组成的数组
get_declared_interfaces — 返回一个数组包含所有已声明的接口
get_declared_traits — 返回所有已定义的 traits 的数组
get_object_vars — 返回由对象属性组成的关联数组
get_parent_class — 返回对象或类的父类名
interface_exists — 检查接口是否已被定义
is_a — 如果对象属于该类或该类是此对象的父类则返回 TRUE
is_subclass_of — 如果此对象是该类的子类,则返回 TRUE
method_exists — 检查类的方法是否存在
property_exists — 检查对象或类是否具有该属性
trait_exists — 检查指定的 trait 是否存在