Как реализовать этот вид функциональности:
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 test должен работать.
То, что вы пытаетесь сделать, возможно, но вам нужно установить ссылку на ссылку в методе 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
, Chaging full_name
в bind2
в fullName
должен исправить вашу проблему.
проблема в том, что вы назначаете ключ full_name для вашей переменной-члена и пытаетесь получить доступ к переменной fullName, чтобы она возвращала NULL