可能重复:
在PHP中我能使用多于一个类来扩展一个类吗?
在PHP中我能使用多于一个类来扩展一个类吗?
我有一个类,有几个子类,但现在我想添加另一个类,我也希望它是父类的子类,但我还想利用另一个子类中的许多函数。
我曾考虑过将其他子类中的相应函数移动到父类中,但认为这并不是必要的,因为只有这两个子类会使用它们,所以希望我可以从主父类和现有子类之一继承。
我有一个类,有几个子类,但现在我想添加另一个类,我也希望它是父类的子类,但我还想利用另一个子类中的许多函数。
我曾考虑过将其他子类中的相应函数移动到父类中,但认为这并不是必要的,因为只有这两个子类会使用它们,所以希望我可以从主父类和现有子类之一继承。
你可以扩展子类以继承其父类和子类的函数,我认为这就是你想要做的。
class Parent
{
protected function _doStuff();
}
class Child extends Parent
{
protected function _doChildStuff();
}
class Your_Class extends Child
{
// Access to all of Parent and all of Child's members
}
// Your_Class has access to both _doStuff() and _doChildStuff() by inheritance
如@morphles所说,这个特性将在php 5.4中作为traits(类似于其他语言中的mixin)提供。但是,如果确实需要,你可以使用以下解决方法:
// your class #1
class A {
function smthA() { echo 'A'; }
}
// your class #2
class B {
function smthB() { echo 'B'; }
}
// composer class
class ComposeAB {
// list of implemented classes
private $classes = array('A', 'B');
// storage for objects of classes
private $objects = array();
// creating all objects
function __construct() {
foreach($this->classes as $className)
$this->objects[] = new $className;
}
// looking for class method in all the objects
function __call($method, $args) {
foreach($this->objects as $object) {
$callback = array($object, $method);
if(is_callable($callback))
return call_user_func_array($callback, $args);
}
}
}
$ab = new ComposeAB;
$ab->smthA();
$ab->smthB();
PHP不是单一继承语言。如果您想了解即将推出的 PHP 5.4 版本中的新功能,可以查找 traits 特性。
interface
来代替。
extends A, B
或类似的语法)。 - alxblYour_Class
中,您可以像往常一样使用$this->method()
调用所有protected
和public
成员... 每个成员都将被继承。Child
是Your_Class
的父类,但通过多态性,指定为Parent
的类型提示也会接受一个Your_Class
对象。我添加了代码示例的一些详细信息以展示这一点。 - alxbl