Связать с внешней переменной и в защищенном поле класса с помощью метода param

Как реализовать этот вид функциональности:

  • Заполните сущность, например. Member с данными
  • привязывать Member формировать с $form->bind($member) в частную собственность _formData
  • Затем сделайте что-нибудь внутри $ form, например. $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 должен работать.

1

Решение

То, что вы пытаетесь сделать, возможно, но вам нужно установить ссылку на ссылку в методе 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 должен исправить вашу проблему.

0

Другие решения

проблема в том, что вы назначаете ключ full_name для вашей переменной-члена и пытаетесь получить доступ к переменной fullName, чтобы она возвращала NULL

0

По вопросам рекламы [email protected]