如何实现这种功能:
- 用数据填充实体,例如
Member
- 将
Member
绑定为表单,将$form->bind($member)
绑定为私有属性_formData
- 然后在$form中做一些事情,例如
$form->validate()
和_formData
-
CCD_ 7也应该随着CCD_ 8的改变而改变。
class Form { private $_formData; function bind1(&$row) { // this change member outside $row['full_name'] = $row['first_name'] . ' ' . $row['last_name']; } function bind2(&$row) { $this->_formData = $row; // this will not change memeber $this->_formData['full_name'] = $this->_formData['first_name'] . ' ' . $this->_formData['last_name']; } } $member = array('full_name' => null, 'first_name'=>'Fn', 'last_name' => 'Ln'); $form = new Form(); $form->bind1($member); var_dump($member['full_name']); // output: 'FnLn' $form->bind2($member); var_dump($member['full_name']); // output: null
方法validate
使用private_fieldData,所以这个要工作的bind2测试应该可以工作。
您想要做的是可能的,但您需要在bind1和bind2方法中设置引用的引用,如下所示:
$this->_formData = & $row;
您还将full_name
和fullName
拼错为数组键。例如,在bind2
方法中:
$this->_formData['full_name'] = $this->_formData['first_name'] . ' ' . $this->_formData['last_name'];
在测试代码中,您可以var_dump full_name
。将bind2
中的full_name
更改为fullName
应该可以解决您的问题。
问题是您正在分配成员变量的full_name密钥,并试图访问fullName变量,因此它返回NULL