Php 使用方法param绑定外部变量和类内受保护字段

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

如何实现此类功能:

用数据填充实体,如成员 使用$form将成员绑定到表单->将$Member绑定到私有属性\u formData 然后在$form中做一些事情,例如$form->validate with _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

方法验证使用私有_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'];