1

当我对数组进行 var_dump 时,$mailer我得到:

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但如何访问和编辑它?

4

3 回答 3

1

我不必告诉您这可能是隐藏的原因,并且很可能有一种方法可以在不直接访问它的情况下设置它(正如其他人已确保告诉您的那样),但是您可以扩展该类并添加您自己的设置方法:

<?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)
        }
    */
?>

演示

于 2013-11-01T12:04:37.663 回答
1

这是一个非常简单的示例(没有错误检查),说明如何使用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']);
于 2018-08-16T21:08:41.210 回答
0

阅读 class 的文档Fooman_EmailAttachments_Model_Core_Email_Template_Mailer。应该有一个可以调用的方法
来编辑信息, 例如$mailer->setEmails('foo'). 如果没有,那么数据就不会被修改。

于 2013-11-01T11:53:04.710 回答