toString()在访问公共属性而不是对象时返回

时间:2015-12-13 03:44:39

标签: php

假设我有一个班级:

class Apple {
    public function someMethod() {}
    public function __toString()
    {
         return 'apple';
    }
}

假设我将此类作为公共属性嵌套在另一个类中:

class Basket {
    public $apple;
    public function __construct() {
        $this->apple = new Apple();
    }
}

如果我从某个地方的篮子里访问$ apple,我会返回字符串'apple'而不是Apple类:

$basket = new Basket();
$basket->apple->someMethod();

// PHP Fatal error:  Call to a member function someMethod() on a non-object

var_dump($basket->apple)

// string (5) "apple"

这种行为对我来说似乎很奇怪。除非我连接到一个字符串或处理一个对字符串有效的函数,否则我不想将Apple表示为字符串。

我错过了什么或者这是正确的吗?似乎应该有一种方法来访问对象本身,如果它被声明为public。

1 个答案:

答案 0 :(得分:0)

您没有提及实例($this->method() / $this->var

class Apple {
    public function someMethod() {}
    public function __toString()
    {
         return 'apple';
    }
}

class Basket {
    public $apple;
    public function __construct() {
        $this->apple = new Apple();
    }
}

$basket = new Basket();
$basket->apple->someMethod();
var_dump($basket);
var_dump($basket->apple);

输出

object(Basket)#1 (1) { ["apple"]=> object(Apple)#2 (0) { } }
object(Apple)#2 (0) { }