我试图让这个对象里面的字符串"this info"让我们调用它$object,但数据受到保护,我该如何访问那个口袋?
object(something)#29 (1) {
["_data":protected]=>
array(10) {
["Id"]=>
array(1) {
[0]=>
string(8) "this info"
}
["SyncToken"]=>
array(1) {
[0]=>
string(1) "0"
}
["MetaData"]=>
array(1) {
Run Code Online (Sandbox Code Playgroud)
显然$object->_data给了我一个错误Cannot access protected property
有一些替代方法可以获取对象的私有/受保护属性,而不需要您修改原始源代码.
选项1 - 反思:
维基百科将反思定义为
...计算机程序在运行时检查和修改程序的结构和行为(特别是值,元数据,属性和函数)的能力.[反思(computer_programming)]
在这种情况下,您可能希望使用反射来检查对象的属性,并将其设置为可访问受保护的属性_data
除非您有可能需要的非常具体的用例,否则我不建议使用反射.这是一个如何使用Reflection with PHP获取私有/受保护参数的示例:
$reflector = new \ReflectionClass($object);
$classProperty = $reflector->getProperty('_data');
$classProperty->setAccessible(true);
$data = $classProperty->getValue($object);
Run Code Online (Sandbox Code Playgroud)
选项2 - 子类(仅限受保护的属性):
如果类不是final,则可以创建原始的子类.这将使您可以访问受保护的属性.在子类中,您可以编写自己的getter方法:
class BaseClass
{
protected $_data;
// ...
}
class Subclass extends BaseClass
{
public function getData()
{
return $this->_data
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
16608 次 |
| 最近记录: |