假设你有几个任意类,如下所示:
class Foo
{
$foovar;
public function __construct()
{
$foovar = "Foo";
}
public function getFoo()
{
return($foovar);
}
}
class Bar
{
$F;
public function __construct()
{
$F = new Foo();
}
}
我的问题是可以编写类似下面的内容
$B = new Bar();
echo($B->F->getFoo());
就像我在上一个问题中所说的那样,我来自强大的Java背景知道你可以将变量链接在一起System.out.println()
来调用其他对象方法。我想知道这是否可以在PHP中使用
答案 0 :(得分:3)
是的,你是绝对正确的,请看这个例子。
class Foo {
public function hello() {
return 'hello world';
}
}
class Bar {
public $driver = NULL;
public function __construct() {
$this->driver = new Foo;
}
}
$test = new Bar;
echo $test->driver->hello();
其他一些评论
return($foovar);
$this->foovar
与班级成员合作(除非是静态的,在这种情况下是self::$foovar
类成员还必须指定其访问类型,例如public $foovar;
。
为什么你从Java迁移到PHP是超出我的,但祝你好运:)
答案 1 :(得分:1)
这当然是可能的。
答案 2 :(得分:1)
不仅可行,而且非常普遍。有一次你会看到它使用的是delegation。
答案 3 :(得分:0)
如果$F
中的$B
是公开的,或者您在Bar中有__get($var)
方法愿意返回$F
,则$B->F->getFoo()
可以正常工作。< / p>
答案 4 :(得分:0)
是的,但有一些额外的语法。我使用getter方法希望能更好地说明一些事情,但如果你在公共类中使用变量,就不需要它们。
<?php
class Foo
{
private $foovar;
public function __construct()
{
$this->foovar = "Foo";
}
public function getFooVar()
{
return $this->foovar;
}
}
class Bar
{
private $fooclass;
public function __construct()
{
$this->fooclass = new Foo();
}
public function getFoo()
{
return $this->fooclass;
}
}
$bar = new Bar();
print $bar->getFoo()->getFooVar();
?>
答案 5 :(得分:0)
当然有可能 它叫做链接方法
// first clean your code
class Foo
{
public $foovar = NULL;
public function __construct()
{
$this->foovar = "Foo";
return $this;
}
public function getFoo()
{
return $this->foovar;
}
}
class Bar
{
public $F = NULL;
public function __construct()
{
$this->F = new Foo();
return $this;
}
}
$B = new Bar(); // create the object. The constructor returns the whole object
// so we have full access to the methods
// firs call the object $B which return in the constructor $this so we call now
// method F now the object F returns also in the constructor the whole object $this
// we now can access the method getFoo() which will print Foo
echo $B->F->getFoo();