@类的静态方法和静态属性
#静态方法是以类作为作用域的函数。静态方法不能访问这个类中的普通属性。但可以访问静态属性。
#在类的外部访问静态方法和属性
##【格式】类名::属性、类名::方法
#在当前类中访问静态方法和属性
##【格式】self::属性、self::方法
@抽象类(abstract class)
#用关键字abstract来声明
#是不能被直接实例化的类
#抽象类可以理解为一套约束子类的规则。
#抽象类中只定义(或部分实现)子类需要的方法。子类可以继承它并且通过实现其中的抽象方法。
#大多数情况下,抽象类至少包含一个抽象方法。抽象方法用abstract关键字声明。
#例:
abstract class ShopProductWriter {
protected $products = array();
abstract public function write();
}
@接口
#用关键字interface来声明
#使用implemnets关键子来实现接口
#任何实现接口的类都要实现接口中所定义的所有的方法
#例
interface Chargeable {
public function getPrice();
}
class ShopProduct implements Chargeable{
//...
public function getPrice(){
return ($this->price - $this->discount);
}
}
@延迟静态绑定:static关键字
#只能用于静态属性或静态方法
#延迟绑定
#例
abstract class DomainObject {
public static function create(){
return new static();
}
}
class User extends DomainObject{
}
class Document extends DomainObject{
}
print_r(Document::create());
@Final类和方法
#final类不能有子类,final方法不能被覆写。
#【格式】 final class 类名{
}
@魔术方法
#属性重载
##__get($property) 访问未定义属性时被调用
##__set($property, $value) 给未定义的属性赋值时被调用
##__isset($property) 给未定义的属性调用isset()时被调用
##__unset($property) 给未定义的属性调用unset()时被调用
##__call($method, $arg_array) 调用未定义的方法时被调用
#__construct() 构造方法
#__destruct() 析构方法
#方法重载
##__call()
##__callStatic()
#序列化与反序列化
##__sleep()
##__wakeup()
#__clone() 对象复制
#__toString() 类变字符串
#__invoke() 类变函数
#__set_state() 导出类
#__debuginfo() 调试打印
@反射API
#指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。
#可以做自动加载插件,自动生成文档,甚至可用来扩充PHP语言。
#Reflection 为类的摘要提供静态函数export()
#ReflectionClass 类信息和工具
#ReflectionMethod 类方法信息和工具
#ReflectionParameter 取回了函数或方法参数的相关信息
#ReflectionProperty 类报告了类的属性的相关信息
#ReflectionFunction 类报告了一个函数的有关信息
#ReflectionException 错误类
#ReflectionExtension 扩展信息