类的自动加载
__autoload()函数
当时用一个不存在的类时,__autoload($className)会自动调用
当时用new关键字,创建一个不存在的类对象时,__autoload()自动调用;
function __autoload($className)
{
$filepath = "$className.class.php";
if (file_exists($filepath)) {
require_once($filepath);
}
}
自定义类文件加载函数(spl_autoload_register)
注册多个类加载函数,形成一个类文件的队列, 按照注册时的顺序,依次执行
使用匿名函数做参数
spl_autoload_register(function ($className) {
//类文件路径的数组
$arr = ["./libs/$className.class.php","./public/$className.class.php"];
// 循环数组
foreach ($arr as $filepath) {
if (file_exists($filepath)) require_once($filepath);
}
});
对象克隆
clone,当对象克隆完成时,在类里会自动调用__clone()
遍历对象属性
foreach($this as $k=$v)
在类外遍历只能得到public的属性,在类内能遍历到所有属性
魔术方法
-
__toString()
将对象转为字符串时,类里的__toString()会自动调用 -
__invoke()
当把对象当成函数调用时,会自动调用 -
__LINE__
当前行号 -
__FILE__
当前文件 -
__DIR__
当前目录 -
__CLASS__
当前类名 -
__FUNCTION__
当前函数名 -
__METHOD__
当前方法名
面向对象设计模式
- 单例模式
(三私一公)
一私:私有的静态的保存对象的属性
一私:私有的构造方法,阻止类外new对象
一私:私有的克隆方法,阻止类外clone对象
一公:共有的静态的创建对象的方法
class Db{
private static $obj = null;
private function __construct(){}
private function __clone(){}
public static function getInstance(){
if (!self::$obj instanceof self) {
self::$obj = new self;
}
return self::$obj;
}
}
$obj instanceof ClassName
判断一个对象是否是某个类产生的对象
- 工厂模式
php的重载
动态地『创建』类属性和方法,是通过魔术方法来实现的
当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用
属性重载
__set()、__get()、__isset()、__unset()
方法重载
__call()、__callStatic()
静态延时绑定
static::静态属性,静态方法,成员方法,类常量
是哪个类的对象,代表哪个类
类型约束
主要指方法参数或函数参数,function (array $a)
序列化
- serialize()
- unserialize()
对象序列化之前会调用魔术方法__sleep()
,反序列化会调用__wakeup()
常用方法
class_exists()判断类是否存在
interface
method
property
获取类名
get_class()
get_parent_class()