Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.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

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_Class - Fatal编程技术网

Php 正在引用的访问类?

Php 正在引用的访问类?,php,oop,class,Php,Oop,Class,我知道这似乎是一个奇怪的问题,但假设我有两门课 class Class1 { private $foo; function addBar(Class2 &$bar) { $this->foo = $bar; } } class Class2 { private $foo } $a = new Class1; $b = new Class2; $a->addBar($b); Class2有没有办法从Class1读取

我知道这似乎是一个奇怪的问题,但假设我有两门课

class Class1 {
    private $foo;
    function addBar(Class2 &$bar)
    {
        $this->foo = $bar;
    }
}


class Class2 {
    private $foo
}

$a = new Class1;
$b = new Class2;
$a->addBar($b);
Class2
有没有办法从
Class1
读取信息?即使它们在同一个代码块中,它们在我的脚本中也在不同的文件中。我之所以需要这样做,是因为我通过引用链接了
Class2
,但是
Class2
Class1
之前是不允许运行的,我知道我可以将另一个变量传递给
Class2
引用
Class1
(例如
$b->addFoo($a)
),但如果可能,我宁愿避免这样做

我希望这可以做到
提前谢谢

编辑


多亏了所有帮助过我的人,我决定改弦易辙。再次感谢。

Class2
可以调用
Class1
对象上的方法,尽管它不能访问私有数据。但是它必须有一个对
Class1
实例的引用,才能调用它上面的任何方法

class Class1 {
    private $foo;
    function addBar(Class2 $bar)
    {
        $this->foo = $bar;
        $bar->addBar($this);
    }
}

class Class2 {
    private $foo
    function addBar(Class1 $bar)
    {
        $this->foo = $bar;
    }
}

$a = new Class1;
$b = new Class2;
$a->addBar($b);
您的示例没有显示实际包含任何代码的
Class2
,而且听起来您试图避免在
$b
上调用方法。那没有道理
Class2
如果您从未对其调用任何方法,则无法“执行”任何操作

class Class1 {
    private $foo;
    function addBar(Class2 $bar)
    {
        $this->foo = $bar;
        $bar->addBar($this);
    }
}

class Class2 {
    private $foo
    function addBar(Class1 $bar)
    {
        $this->foo = $bar;
    }
}

$a = new Class1;
$b = new Class2;
$a->addBar($b);

这样,
Class2()中的
doSomething
Class1

中的
addBar()之后运行,因为
Class2
中有一些代码在
Class1
完成之前我不想运行,但是它们之间唯一的联系是从
Class2
Class1
然后按正确的顺序调用?我看不出有什么问题。。(可能会添加更多代码?)那么为什么不在末尾将其添加到addBar函数中,比如
$bar->dosomethig()
,或者您想要一些不同的东西呢?有时候一个小时的思考可以节省您编写代码的时间…@BlackWraith您仍然应该接受答案。我们真诚地回答,仅仅因为你改变了主意并不意味着我们应该受到惩罚。没错,但这是示例代码。基本上我想知道的是,尽管我可以通过
$this->foo->foo
Class2
中访问
Class1
中的信息,但是,由于
和$bar
引用,信息可以双向共享吗?
Class1
方法引用
Class2
实例的事实并没有给
Class2
实例引用
Class1
实例。在某个地方,您需要调用
$b
上的方法并将
$a
作为参数传递。我删除了
&
引用,因为它是。