两种方式
1、正则匹配修改class加载机制
spl_autoload_register(function($class) { $file = __DIR__ . "/classes/{$class}.php"; if (!file_exists($file)) return; $code = file_get_contents($file); // 简单插入 extends 语句(不推荐用于生产) $code = preg_replace('/class\s+' . preg_quote($class) . '\s*{/', "class {$class} extends ParentClass {", $code, 1); eval('?>' . $code); });2、组合继承,在实例化子类的时候,传递一个父类的参数到构造函数
<?php class ParentClass { public function sayHello() { echo "Hello from ParentClass\n"; } } class ChildClass { private $parent; public function __construct(ParentClass $parent) { $this->parent = $parent; } public function sayHi() { echo "Hi from ChildClass\n"; } public function __call($method, $args) { if (method_exists($this->parent, $method)) { return $this->parent->$method(...$args); } throw new \BadMethodCallException("Method {$method} not found"); } } // 使用 $parent = new ParentClass(); $child = new ChildClass($parent); $child->sayHi(); // 输出: Hi from ChildClass $child->sayHello(); // 输出: Hello from ParentClass
网友回复