在面向对象开发时,一般习惯为每个类创建一个php文件,为了避免每次引用都要include一堆文件,可以使用spl_autoload_register函数。
我在同一个文件夹下创建Ming.php,Vehicle.php,Car.php,Bick.php四个文件,实现一个简陋的工厂模式,文件内容如下:
Vehicle.php
interface Vehicle{
function run();
}
Car.php
class Car implements Vehicle{
public function run(){
echo '汽车每小时90km';
}
}
Bike.php
class Bike implements Vehicle{
public function run(){
echo '自行车每小时15km';
}
}
Ming.php
spl_autoload_register(function($name){
require_once $name.'.php';
});
class Ming{
public function gotowork($way){
switch ($way){
case 'Car':
return new Car;
default:
return new Bike;
}
}
}
(new Ming)->gotowork('Car')->run();
输出:
在Ming.php中使用到Car,在Car.php中并没有include Vehicle.php,但是spl_autoload_register自动加载了Car的依赖Vehicle.php。
官方已使用spl_autoload_register代替__autoload,__autoload已在php7.2被废弃,在8.0被移除。