[英]Is assigning variable with Scope Resolution Operator(::) same as $this->variable?
只是好奇。
如果我分配self::$session = $reg->get('session');
在__construct
类中,变量可以用作类的属性,就像$this->session = $reg->get('session');
?
我不知道该如何测试。 我可以测试的唯一方法是通过更改所有框架来破坏整个框架。
只是尝试了一下PHP shell( php -a
)可能发生的情况。
php > class a { public $b; function __construct () { self::$b = 10; } }
php > $o = new a;
PHP Fatal error: Access to undeclared static property: a::$b in php shell code on line 1
php > class a { public static $b; function __construct () { $this->b = 10; } }
php > $o = new a;
php > print $o->b;
10
php > print a::$b;
php > // outputs nothing (is still NULL)
php > class a { public static $b; function __construct () { self::$b = 10; } }
php > $o = new a;
php > print $o->b;
PHP Notice: Undefined property: a::$b in php shell code on line 1
php > // doesn't print a value (basically NULL)
self::...
)之类的非静态属性。 不,您不能在静态和非静态访问与写入之间切换。
在开始之前,您也可以使用在线键盘工具轻松地对此进行测试,但是我认为实际解释发生的情况可能会更好。
让我们基于您所描述的内容来假设您拥有此类:
class MyClass
{
private static $session;
public function __construct($reg)
{
self::$session = $reg->get('session');
}
}
表达式self::$session
引用了一个类变量,该类变量在MyClass
所有实例之间共享。
让我们将类更改为以下内容:
class MyClass
{
private $session;
public function __construct($reg)
{
$this->session = $reg->get('session');
}
}
现在,表达式$this->session
引用一个实例变量,该变量未与MyClass
任何其他实例共享。
由于存在这种差异,它们不能互换使用,因此您必须根据功能设计做出决定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.