解释
在研究过程中,我创建了下面这个小代码片段,以更好地了解 php。我现在创建这个问题的原因是为了接触更有经验的开发人员,以免过多地阻塞系统,并且不要让系统变得更进一步。
下面是有关如何访问类范围之外的私有或受保护变量的代码示例。
代码示例
此代码示例将设置为对类内部$TestVar私有变量的引用。test::Atest
<?php
class Test {
private $A = 123;
public function changeA ($Var){
$this->A = $Var;
}
public function createReference(){
return([&$this->A]);
}
}
$TestClass = new Test();
$TestVar = &$TestClass->createReference()[0];
通过使用Test::changeA()或改变$TestVar的内容test::A可以被改变。
//Test Current Value
var_dump($TestVar);
//Change test::A the intended way
$TestClass->changeA(321);
var_dump($TestVar);
//Change it by reference
$TestVar = 777;
var_dump($TestVar);
var_dump($TestClass);
预期输出:
int 123
int 321
int 777
object(Test)[1]
private 'A' => int 777
为什么我认为这是一个错误,手册在描述和示例中都指出:
声明为 protected 的成员只能在类本身内部以及通过继承类和父类访问。
声明为私有的成员只能由定义该成员的类访问。
这是不可能的或有意的。
这是一个错误、一个错误的文档还是只是一个必须忍受的错误。
烙印99