使用方法param绑定外部变量和类保护字段中的


Bind outside variable and in Class protected field with method param

如何实现这种功能:

  • 用数据填充实体,例如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_namefullName拼错为数组键。例如,在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