将对象存储为PHP类中的变量

时间:2010-01-27 20:39:39

标签: php oop

假设你有几个任意类,如下所示:

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中使用

6 个答案:

答案 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);
  • 这里不需要parens。
  • 您必须使用$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();