我可以在不扩展Class的情况下使另一个Class的函数子级吗


Can I make a function child of another Class without extends Class?

我的类独立于另一个类在我的类中,一个函数与另一个类中的函数做着相同但精细的工作。我可以使用parent:: function_in_another_class()并让我的函数加入父函数的作业流吗?

否。

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

但你想要的可能是:

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

如果任何类方法已经在做同样的事情,为什么还要调用join?

如果你想要相同的作业流,最好的方法就是实例化另一个类并调用相同的方法。这就是我们使用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);
    }
}

如果当前类是另一个类的子类,是的,您可以。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();
?>

这里可以做的最好的事情是从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_semething(

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

中引用$this