PHP:我必须使用$ this来访问类属性吗?

时间:2013-12-12 07:11:16

标签: php oop

在PHP中,使用隐式参数$ this:

访问类属性
class Test {
    private $foo;
    public function __construct($val) {
        $this->foo = $val;
    }
}

但是这(没有双关语意)失败

class Test {
    private $foo;
    public function __construct($val) {
        $foo = $val;
    }
}

我是否必须使用$this来访问PHP中的类属性(我猜是的)?如果是这样,为什么?也许与它的动态本质有关?我知道在Java中,我们可以选择这样做。

3 个答案:

答案 0 :(得分:1)

是的,在PHP中,您必须使用$this->foo来访问对象字段 简单的$foo被解释为局部变量。

实施例

class Test {
    private $foo;

    public function __construct($someVar) {
        $foo = $someVar; // here $foo is a local variable and its value will be dismissed
    }

    public function getFoo() {
        return $this->foo;
    }
}

$test = new Test('bar');
$result = $test->getFoo();
var_dump($result); // $result will be NULL instead of the expected 'bar'

答案 1 :(得分:1)

是的,PHP缺少词法范围,并且对象被实现(如果不是仍然)作为表。这就是为什么==在对象上测试成员(这是不好的BTW)

PHP没有全局变量和局部变量的概念,这就是为什么你需要使用全局变量需要全局关键字 - 'cept for superglobals,PHP在这方面真的很混乱。

答案 2 :(得分:1)

可悲的是,是的,你必须。在这方面没有计划PHP,因为OOP后来逐渐被强加。由于PHP没有声明局部变量的语法,因此通过使用$this->限定所有访问来区分字段变量。它与过程代码中的方式类似,使用global $varname;声明或$GLOBALS['varname']完成对全局变量的引用。范围不继承。没有办法解决它。