PHP-php 如何继承指定类
本人写了一个框架,为了灵活性,想继承制定类,
比如:
class A extends $Controller{
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
本人写了一个框架,为了灵活性,想继承制定类,
比如:
class A extends $Controller{
}
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
CI 框架中就采用楼上的做法
php 不支持动态继承 ... 哪怕是 trait 也要在定义类的时候写死 ...
如果你非要实现这个功能只能找替代的办法 ... 简略的写了一下 ... 如下 ...
<?php
$foo = new foo( new bar );
echo $foo->sayhi();
class DynamicExtends {
private $object;
protected function setParent( $object ) {
$this->object = $object;
return;
}
public function __call( $name, $parameter ) {
return isset( $this->object ) ?
$this->object->$name( $parameter ) : null;
}
}
class foo extends DynamicExtends {
public function __construct( $object ) {
$this->setParent( $object );
}
}
class bar {
public function sayhi() {
return 'Hi Sunyanzi';
}
}
<?php
class A {
function show() {
echo "this is A";
}
}
class B {
function show() {
echo "this is B";
}
}
// $class = "A";
$class = "B";
eval("class C extends $class {}");
$c = new C();
$c->show();
最符合你的方法是使用runkit_class_adopt该函数(需要安装runkit扩展 - beta),该函数可以动态的修改一个类的定义。
Sunyanzi使用组合加模式方法的方式很好,lazyboy使用eval也很好,我另外提供一种蛋疼的方法:
<?php
class A {
public $a = 1;
}
class B {
public $a = 2;
}
function test($a) {
if ($a) {
class C extends A {
public $c = 3;
}
}
else {
class C extends B {
public $c = 3;
}
}
}
test(false); //test(true);
$c = new C;
var_dump($c);