PHP 文档学习 - 5 - 类

来源:互联网 发布:c语言中合法的字符常量 编辑:程序博客网 时间:2024/06/03 13:17

1. 基本概念

(1) 类名大小写不敏感

(2) 实例化的另一种方法 :

class Foo {}$className = 'Foo';$instance = new $className;

(3) 在类定义内部可以使用 new self / static / parent 创建新对象

(4) final 能阻止子类继承或方法覆盖( 方法覆盖时参数列表需保持一致, 构造函数除外 ), 且final 只能修饰类名和类的成员函数

(5) ClassName::class 能获得类的完全限定名称( 包括命名空间 ) 


2. 类常量

(1) 关键字 const, 名称不能加 $, 大小写敏感

(2) 类常量用范围解析操作符 :: 读取, 可以看出类常量为类的静态属性

(3) 类常量不能用 public, protected, private 等修饰, 访问权限为 public


3. 自动加载

参照全局魔法方法  __autoload(), sql_autoload_register()


4. 构造函数, 析构函数

(1) 继承时如果覆盖了构造 / 析构函数, 子类不会隐式调用父类的构造函数和析构函数, 需要显示调用 ( 注意构造和析构顺序 )

(2) 继承时如果子类构造函数中显示调用父类构造函数, 注意输入参数不匹配可能导致的问题 ( 例如中断需要该参数的语言..)


5. 访问权限

(1) 类成员默认访问权限为 public

(2) 同一个类的不同实例可以互相访问对方的任何属性 ( 包括私有属性和保护属性 )


6. 抽象类

(1) 子类实现父类的抽象方法, 参数类型和数量必须要匹配或添加默认参数

(2) 子类实现的父类的抽象方法, 访问权限可以更宽松

(3) 抽象方法不能声明 static


7. 接口

(1) 接口名大小写不敏感

(2) 实现多个接口的时候, 若有重名方法参数列表须保持一致 ( PHP 不支持函数重载 )

(3) 接口可声明静态方法

(4) 接口声明的常量不能被覆盖

(5) 接口继承接口使用 extends, 类实现接口使用 implements


8. 重载

(1) 指环境访问对象不存在的属性 / 方法时对象触发的行为

(2) 通过魔术方法实现, 这些方法必须声明为 public, 且参数不能用引用传递

          属性重载 : public void __set ( string $name , mixed $value )
                             public mixed __get ( string $name )
                             public bool __isset ( string $name )
                             public void __unset ( string $name )

          方法 重载: public mixed __call ( string $name , array $arguments )
                             public static mixed __callStatic ( string $name , array $arguments )


9. 遍历对象

(1) 使用 foreach 能遍历可见属性( 包括从父类继承的属性 ) ( 可见由上下文环境决定, 类定义内部使用关键词 $this )

(2) 实现预定义接口 Iterator 


10. 魔术方法

常用 : __construct(), __desruct(), __toString(), __clone()


11. 比较

(1) == : 全部属性相等或指向同一个对象

(2) === : 指向同一个对象


12. 类型约束

(1) 基本类型, Traits不能使用约束

(2) 参数默认值为 NULL 才能使用 NULL


13. 序列化

(1) 序列化相关: serialize(), __sleep()

(2) 反序列化相关: unserialize(), __wakeup()

0 0