我可以在没有扩展类的情况下创建另一个类的函数子项吗?

时间:2012-01-07 11:18:04

标签: php class

我的班级与另一班级无关。 在我的类中,一个函数正在做同样但精炼的工作作为另一个类中的函数。我可以使用parent:: function_in_another_class()并让我的函数加入父函数的作业流程吗?

4 个答案:

答案 0 :(得分:5)

没有

在PHP中,您只能从无或一个类扩展。在您编写时,两个类彼此独立,没有信息可以在哪里找到一个或哪个类。

但你正在寻找的可能是:

class A
{
    function myFunction() {}
}

class B
{
    private $a;
    public function __construct(A $a)
    {
        $this->a = $a;
    }
    public function myFunction()
    {
        $this->a->myFunction();
    }
}

答案 1 :(得分:1)

如果任何类方法已经做同样的事情,你为什么要打电话加入呢?

你不能这样做。如果您想要相同的作业流,最好的方法是实例化另一个类并调用相同的方法。这就是为什么我们使用OOP。

参见示例

interface Fable()
{
    public function f();
}

class OtherClass implements Fable
{
    public function f()
    {
      // job flow
    }
}

class MyClass
{
    private $fable;
    public function __construct(Fable $f)
    {
        $this->fable = $f;
    }

    public function method1($args){
        return $this->fable->f($args);
    }
}

答案 2 :(得分:0)

如果当前班级是另一班级的孩子,是的,你可以。 parent对父类的引用。

来自php.net

<?php
class A {
    function example() {
        echo "I am A::example() and provide basic functionality.<br />\n";
    }
}

class B extends A {
    function example() {
        echo "I am B::example() and provide additional functionality.<br />\n";
        parent::example();
    }
}

$b = new B;

// This will call B::example(), which will in turn call A::example().
$b->example();
?>

答案 3 :(得分:-1)

您可以做的最好的事情是从A类扩展B类

Class B extends Class A

但是,你也可以:

class ClassA {

  function do_something($args) {
    // Do something
    }

}

class ClassB {

  function do_something_inclassA($args) {
    classA::do_something($args);
    }

}

重要:调用classa :: do_something();是一个静态调用,换句话说,有错误报告E_STRICT,你会收到静态通知警告,因为函数do_something()不是静态函数do_something()

另外,静态调用此函数(即classa :: do_something())意味着类a的函数不能在其中引用$ this