php 你可以在一个类中扩展两个类吗?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6565261/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 00:44:12  来源:igfitidea点击:

Can you extend two classes in one class?

phpoopextends

提问by Brett

Possible Duplicate:
Can I extend a class using more than 1 class in PHP?

可能的重复:
我可以在 PHP 中使用 1 个以上的类来扩展一个类吗?

I have a class that has several child classes, however I am now adding another class which I also want to be a child of the parent, however I would also like to utilize many of the functions from one of the other child classes.

我有一个包含多个子类的类,但是我现在正在添加另一个类,我也想成为父类的子类,但是我也想利用其他子类之一的许多功能。

I've thought of just moving the respective functions from the other child class to the parent, however didn't think this was really needed as it would only be these two child classes that make use of them so was hoping that I could extend from the main parent class and from one of the existing child classes.

我曾想过将各自的功能从另一个子类移动到父类,但是我认为这不是真的需要,因为只有这两个子类使用它们,所以希望我可以从主要父类和现有子类之一。

回答by alxbl

You can extend the child class to inherit both its parent and the child's functions, which I think is what you are trying to do.

您可以扩展子类以继承其父类和子类的功能,我认为这就是您想要做的。

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

回答by RReverser

As said @morphles, this feature will be available as traits (like mixins in other languages) in php 5.4. However, if it's really needed, you can use such workaround:

正如@morphles 所说,此功能将在 php 5.4 中作为特征(如其他语言中的 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();

回答by morphles

No php is single inheritance language. If you can you can lookup upcoming feature in php 5.4, that is traits.

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

回答by rahim asgari

As a yes/no answer i can say no. You can't extend from multiple classes in php. but you can use interfaceinstead.

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

回答by fabspro

You can do this by thinking backwards, however it depends on the situation. If you would like to keep your classes separate, nobody can give you a good answer of how to structure your objects and inheritance unless you give us more information. Also keep in mind that getting too worried about getting class structure right is a burden in small projects and you may as well just move the methods over and be done with it and learn more about classes later.

您可以通过向后思考来做到这一点,但这取决于具体情况。如果你想让你的类分开,除非你给我们更多的信息,否则没有人能给你一个关于如何构造你的对象和继承的好答案。还要记住,在小项目中过于担心类结构是否正确是一种负担,您不妨将方法移过去并完成它,稍后再了解有关类的更多信息。