Php 使用方法param绑定外部变量和类内受保护字段
如何实现此类功能: 用数据填充实体,如成员 使用$form将成员绑定到表单->将$Member绑定到私有属性\u formData 然后在$form中做一些事情,例如$form->validate with _formData $member也应随着_formData的更改而更改Php 使用方法param绑定外部变量和类内受保护字段,php,pass-by-reference,Php,Pass By Reference,如何实现此类功能: 用数据填充实体,如成员 使用$form将成员绑定到表单->将$Member绑定到私有属性\u formData 然后在$form中做一些事情,例如$form->validate with _formData $member也应随着_formData的更改而更改 class Form { private $_formData; function bind1(&$row) { // this change member outside
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
方法验证使用私有_fieldData的工作,因此此工作bind2测试应该可以工作。您尝试执行的操作是可能的,但您需要在bind1和bind2方法中设置引用的引用,如下所示:
$this->_formData = & $row;
您还将全名和全名作为数组键拼写错误。例如,在bind2方法中:
在您的测试代码中,您可以使用var_dump全名。将bind2中的全名更改为全名应该可以解决您的问题。问题是您正在分配成员变量的全名键,并试图访问全名变量,因此它返回NULL是的$此->\u formData=&$row;解决了的。将私有_formData与pass by reference一起分配***&***$row是有效的解决方案。想要自我回答,但这种方式更好:其他部分不重要,拼写错误-只是测试代码。对此表示抱歉。这部分只是在问题代码中拼错了。关于空值,你是对的,thanx。
$this->_formData['full_name'] = $this->_formData['first_name'] . ' ' . $this->_formData['last_name'];