在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中,我们可以选择这样做。
答案 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']
完成对全局变量的引用。范围不继承。没有办法解决它。