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

Php 访问公共属性而不是对象时返回的toString(),php,Php,假设我有一门课: class Apple { public function someMethod() {} public function __toString() { return 'apple'; } } 假设我将这个类作为公共属性嵌套在另一个类中: class Basket { public $apple; public function __construct() { $this->apple =

假设我有一门课:

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表示为一个字符串,除非我连接到一个字符串或处理一个在字符串上工作的函数


我是遗漏了什么还是这是正确的?如果对象被声明为公共的,那么似乎应该有一种方法来访问对象本身

您没有引用实例(
$this->method()
/
$this->var

输出

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

您没有设置类属性。它必须是构造函数中的
$this->apple
,而不是
$apple
。但这并不能解释代码的其余部分,所以也许可以举一个更好的例子。我认为他只是写错了最后一行。我想他的意思是
var_dump($apple)从构造器内部Woops。那是我的密码输入错误。固定的。构造函数应该设置$this->apple,而不是$apple。但是,观察到的问题仍然存在。@AndyBaird,我认为您的伪代码仍然存在问题,var_dump($basket->apple)不应返回字符串,显然您还有其他问题:
object(Basket)#1 (1) { ["apple"]=> object(Apple)#2 (0) { } }
object(Apple)#2 (0) { }