|
|
|
| форма описывается в виде массива:
$aForm = array(
//атрибуты формы
),
'inputs' => array(
//здесь идут элементы формы
),
'checkers' => array (
'Title'=>array(
'func' => 'check_length',
'notice' => 'заполните имя!',
),
'areaG'=>array(
'func' => 'check_length_textarea',
'notice' => 'Вы не написали сообщение!',
),
)
);
|
Как видно, в этом массиве в 'checkers' указываются функции, которые проверяют входящие значения.
'func' - название функции
'notice' - сообщение об ошибке.
Определяю свойство:
$this->aCheckers = isset($aForm['checkers'])? $aForm['checkers']: array();
Делаю вызов метода, который занимается обработкой ошибок:
//обработчик ошибок формы
public function CheckForm($_REQUEST){
foreach($_REQUEST as $aKey=>$aValue){
$this->error .= $this->$aCheckers[$aKey]['func']($aKey,$this->$aCheckers[$aKey]['notice']);
return $this->error;
}
}
|
Мне выдает ошибку:
Fatal error: Method name must be a string in Z:\home\simmetry1\www\core\classes\Form.php on line 89
Как мне вместо $this->$aCheckers[$aKey]['func'] подставить имя функции? | |
|
|
|
|
|
|
|
для: Лена
(17.01.2011 в 14:44)
| | Не совсем догоняю, но мб так:
$func_name = $this->$aCheckers[$aKey]['func'];
$this->error .= $func_name($aKey,$this->$aCheckers[$aKey]['notice']);
|
| |
|
|
|
|
|
|
|
для: neadekvat
(17.01.2011 в 14:49)
| | сделала вот так:
public function CheckForm(){
if(isset($_REQUEST)){
foreach($_REQUEST as $aKey=>$aValue){
$func = $this->aCheckers[$aKey]['func'];
$this->error .= $this->$func($aKey,$this->aCheckers[$aKey]['notice']);
return $this->error;
}
}
}
|
Все равно пишет: Method name must be a string и ссылается на строку, где метод вызывается. | |
|
|
|
|
|
|
|
для: Лена
(18.01.2011 в 13:11)
| | upd. не сразу понял, в чем суть.
Вот смотрите, это же то, что вам нужно? У меня работает правильно.
<?php
class test
{
public function __construct()
{
$func = 'some';
$this->$func('asd');
}
public function some($arg)
{
echo $arg;
}
}
new test; // asd
|
| |
|
|
|
|
|
|
|
для: neadekvat
(18.01.2011 в 13:53)
| | Да, вы правильно поняли.
Переделала ваш пример под свои нужды. Получилось вот что.
<?php
class test{
private $error='';
private $aCheckers = array(
'Title'=>array(
'func' => 'some',
'notice' => 'Здесь сообщение об ошибке!',
),
'areaG'=>array(
'func' => 'some1',
'notice' => 'Ошибка в текстареа!',
),
);
public function Check($arr){
foreach($arr as $aKey=>$aValue){
$func = $this->aCheckers[$aKey]['func'];
$this->error .= $this->$func();
return $this->error;
}
//$func = 'some';
//$this->$func('asd');
}
public function some(){
return '1111111111111111';
}
public function some1(){
return '222222222222222222';
}
}
$test = new test;
$arr = array('Title'=>'asdfg','areaG'=>'zxczxczxczxc');
print $test->Check($arr);
|
Если запустить скрипт, видно, что срабатывает почему-то только один метод - some(), почему так, не знаете? Там же через цикл должны все методы прогоняться... | |
|
|
|
|
|
|
|
для: Лена
(18.01.2011 в 14:49)
| | куда все?
там return внутри тела цикла. | |
|
|
|
|
|
|
|
для: Trianon
(18.01.2011 в 15:04)
| | Спасибо, не заметила, не внимательная. То, что надо, получилось. | |
|
|
|