如何实现此类功能:
Member
包含数据Member
与$form->bind($member)
绑定到私有财产_formData
$form->validate()
与_formData
$member
也应该随着_formData
的更改而改变。
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
使用私有_fieldData,所以这个工作bind2测试应该可行。
答案 0 :(得分:0)
您尝试做的是可能的,但您需要在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
。将full_name
中的bind2
追溯到fullName
可以解决您的问题。
答案 1 :(得分:0)
问题是您正在分配成员变量的full_name键并尝试访问fullName变量,因此它返回NULL