上一篇: 继承-final关键字
下一篇: 抽象类与接口
1.使用__autoload魔术函数
在php开发中,如果希望从外部引入一个class,通常会使用include和require方法,把定义这个class的文件包含进行。但是,在大型项目开发中,这会出现大量的require或者include方法的调用,这样不仅会降低效率,而且使代码维护困难。如果不小心忘记引入某个类的定义文件,会导致程序崩溃
为解决以上问题,php提供了类自动加载机制,即定义一个__autoload()函数,它会在试图使用未被定义的类时自动调用。这样在php报告错误之前会有最后一个机会加载所需的类。
案例
首先,在当前目录下,定位类定义文件Person.class.php文件
<?php
class Person {
private $name;
private $age;
function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
function say() {
echo "我的名字叫:".$this->name."<br />";
echo " 我的年龄是:".$this->age;
}
}
?>
需要注意的是,对于类定义文件通常使用类名.class.php这种形式命名,这样便于程序编写
test.php
<?php
function __autoload($class_name)
{
require_once $class_name.'.class.php';
}
//当前页面 Pserson 类不存在则自动调用 __autoload() 方法,传入参数 Person
$p1 = new Person("张三","20");
$p1 -> say();
?>
test.php运行结果
需要注意的是,自动加载是指但需要类定义文件而没有找到时,会自动调用__autoload()函数,它不限于实例化对象,还包括继承、序列化等操作。而且,自动加载并不能自己完成加载类功能,它只会提供一个时机,具体加载代码还需要用户编写代码实现
2.使用spl_autoload_register函数
除__autoload()函数之外,spl_autoload_registeer()提供了一个更加灵活的方式来实现自动加载。
案例
<?php
function people($class_name){
require $class_name.'.class.php';
}
spl_autoload_register('people');
$p1 = new Person("张三","20");
$p1 -> say();
?>
运行结果
php中有很多以两个下划线为开头的方法,如,__construct()、__autoload()、__get()、__set()等,这些方法被称为魔术方法
魔术方法有一个特点就是不需要手动调用,在某一个时刻会自动执行,给程序开带来几大便利
常用的魔术方法
方法声明 | 功能描述 |
__sleep() | 对象序列化之前被调用,使程序延缓一段时间执行 |
__wakeup() | 对象反序列时被调用,还原被序列化的对象 |
__toString() | 输出一个对象时被调用,将对象转化为字符串 |
__call() | 在对象中调用一个不可以访问方法时会被调用 |
__callStatic() | 用静态方式中调用一个不可访问方法时被调用 |
__cone() | 克隆对象时被调用 |
__invoke() | 但尝试调用函数的方式调用一个对象时被调用 |
案例:以__toString()为例
<?php
class person{
private $name ="张三";
private $age =21;
public function __toString(){
return "$this->name ($this->age)";
}
}
$p=new person();
echo $p;
?>
运行结果
上一篇: 继承-final关键字
下一篇: 抽象类与接口
*声明:内容来源于网络收集和整理,版权归原著所有,如来源信息有误或侵犯权益,请联系站长作修改和删除处理。