你能在一堂课中扩展两门课程吗?

时间:2011-07-03 20:08:40

标签: php oop extends

  

可能重复:
  Can I extend a class using more than 1 class in PHP?

我有一个有几个子类的类,但是我现在正在添加另一个类,我也想成为父类的子类,但是我也希望利用其他子类中的许多函数

我想过只是将各个函数从其他子类移动到父类,但是并不认为这是真正需要的,因为只有这两个子类才能使用它们所以希望我可以从主父类和现有子类之一扩展。

5 个答案:

答案 0 :(得分:14)

你可以扩展子类以继承它的父类和子函数,我认为这是你想要做的。

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

答案 1 :(得分:9)

如上所述@morphles,这个功能将在php 5.4中作为特征(如其他语言中的mixins)提供。但是,如果确实需要,您可以使用此类解决方法:

// 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();

答案 2 :(得分:8)

没有php是单继承语言。如果可以,你可以在php 5.4中查找即将推出的功能,这就是特质。

答案 3 :(得分:2)

作为是/否答案,我可以拒绝。 你不能从PHP中的多个类扩展。但您可以改用interface

答案 4 :(得分:0)

你可以通过向后思考来做到这一点,但这取决于具体情况。如果您希望将课程分开,除非您向我们提供更多信息,否则没有人能够为您提供如何构建对象和继承的良好答案。另外请记住,过于担心让类结构正确是小项目的负担,你也可以只是将方法移动完成并稍后了解类。