0

我为 PHP 对象继承编写了这个小测试脚本:

<?php

class A {
    protected $attr;

    public function __construct($attr) {
        $this->$attr = $attr;
    }

    public function getAttr() {
        return $this->attr;
    }
}

class B extends A {

}

$b = new B(5);
echo $b->getAttr();

这什么都不显示!为什么不显示5?B班不应该和A班一样吗?

4

2 回答 2

4

错误在这里:

$this->$attr = $attr;

您在此处分配给$this->{5}(的值$attr)。

写,解决财产:

$this->attr = $attr;
//     ^------ please note the removed `$` sign

要注意在这种情况下发生了什么,请尝试转储您的对象:var_dump($b);

于 2013-06-16T13:50:18.157 回答
2

您正在使用变量变量而不是直接访问变量

 $this->$attr = $attr;
        ^
        |----- Remove This

 $this->attr = $attr;
于 2013-06-16T13:49:46.967 回答