[英]Change protected value in object (PHP)
当我执行$mailer
数组的var_dump时,我得到:
object(Fooman_EmailAttachments_Model_Core_Email_Template_Mailer)#352 (8) {
["_emailInfos":protected]=>
array(3) {
[0]=>
object(Mage_Core_Model_Email_Info)#409 (11) {
["_bccNames":protected]=>
array(0) {
}
["_bccEmails":protected]=>
array(0) {
}
["_toNames":protected]=>
array(1) {
[0]=>
string(13) "My Name"
}
["_toEmails":protected]=>
array(1) {
[0]=>
string(17) "justatest@test.com"
}
["_data":protected]=>
array(0) {
}
["_hasDataChanges":protected]=>
bool(false)
["_origData":protected]=>
NULL
["_idFieldName":protected]=>
NULL
["_isDeleted":protected]=>
bool(false)
["_oldFieldsMap":protected]=>
array(0) {
}
["_syncFieldsMap":protected]=>
array(0) {
}
}
我想编辑_toEmails
但是如何访问和编辑它?
我不必告诉您隐藏它的原因可能是最可能的,而且最有可能一种无需直接访问就可以设置它的方法(因为其他人已确保告诉您),但是您可以扩展该类并添加自己的方法对其进行设置:
<?php
class Foo {
protected $_destroyDatabase = false;
}
class Bar extends Foo {
public function SetDestroyDatabase($destroyDatabase) {
$this->_destroyDatabase = $destroyDatabase;
}
}
$foo = new Foo();
$foo->_destroyDatabase = true; //Fatal error
var_dump($foo);
/*
object(Foo)#1 (1) {
["_destroyDatabase:protected"]=>
bool(false)
}
*/
$bar = new Bar();
$bar->SetDestroyDatabase(true); //Success
var_dump($bar);
/*
object(Bar)#2 (1) {
["_destroyDatabase:protected"]=>
bool(true)
}
*/
?>
阅读类Fooman_EmailAttachments_Model_Core_Email_Template_Mailer
的文档。 您应该可以调用一种方法来编辑信息,
类似于$mailer->setEmails('foo')
。 如果没有,那么就不意味着要修改数据。
这是一个非常简单的示例(没有错误检查),您可以使用ReflectionClass
来做到这一点:
function setProtectedProperty($obj, $property, $value) {
$reflection = new ReflectionClass($obj);
$property = $reflection->getProperty($property);
$property->setAccessible(true);
return $property->setValue($obj, $value);
}
setProtectedProperty($mailer, '_toEmails', ['foo@bar.com']);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.