Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从子对象调用对象方法(PHP)_Php_Oop - Fatal编程技术网

从子对象调用对象方法(PHP)

从子对象调用对象方法(PHP),php,oop,Php,Oop,假设类B的对象是类A的属性。如何从类B的对象方法调用类A的对象方法?如果不传递对象链接,什么是好的解决方案 谢谢 下面是代码示例: 您可以使用静态函数 public static function f2{ echo 'hello!'; } f3定义为 function f3(){ A::f2(); } 然而,这最终可能不是您想要的解决方案。查看更多信息。访问该实例函数的唯一方法是将其作为依赖项注入B对象。您可以将其注入构造函数中,如下所示: <?php class

假设类B的对象是类A的属性。如何从类B的对象方法调用类A的对象方法?如果不传递对象链接,什么是好的解决方案

谢谢

下面是代码示例:


您可以使用静态函数

public static function f2{
    echo 'hello!';
}
f3定义为

function f3(){
    A::f2();
}

然而,这最终可能不是您想要的解决方案。查看更多信息。

访问该实例函数的唯一方法是将其作为依赖项注入
B
对象。您可以将其注入构造函数中,如下所示:

<?php

class A {
    protected $b;

    public function __construct() {
        $this->b = new B($this);
    }

    public function f1() {
        $this->b->f3();
    }        

    public function f2() {
        echo 'hello!';
    }
}

class B {
    protected $a;

    public function __construct($a) {
        $this->a = $a;
    }

    public function f3() {
        $this->a->f2();
    }
}

$obj = new A();
$obj->f1();

我认为您唯一的方法是将
$this
传递给
f3()
。阅读
依赖项注入
。您对
var b的使用告诉我您已经习惯于使用旧的PHP4代码。PHP5提供了巨大的新可能性和简单的设计模式集成!其他人由于某种原因无法发布此问题的答案吗?除非函数引用了当前实例。是的,我使用链接更新了答案以使其更清晰。根据
f2()
的功能,这可能会起作用:-)谢谢!另一个类似的问题(与上面的示例分开):例如,函数f()是从函数f1()和f2()调用的。如何找出调用f()的函数?像函数f(){/*echo callerFunctionName();*/}一样,您不想向f()传递任何内容吗?最简单的解决方案是将字符串传递给
f(var name){echo name;}
,然后像调用
f1(){f(“echo this”);}
<?php

class A {
    protected $b;

    public function __construct() {
        $this->b = new B($this);
    }

    public function f1() {
        $this->b->f3();
    }        

    public function f2() {
        echo 'hello!';
    }
}

class B {
    protected $a;

    public function __construct($a) {
        $this->a = $a;
    }

    public function f3() {
        $this->a->f2();
    }
}

$obj = new A();
$obj->f1();