2014-02-12 2 views
-2

Позвольте мне сказать заранее, что я искал SO так же, как и другие сайты, прежде чем, наконец, сломался и спросил. Насколько я понимаю из всего, что я читаю, я делаю все правильно, но это не работает.вызов метода в том же классе не сработает (PHP)

Я работаю с простейшим классом проверки формы с помощью метода для каждого типа используемого поля. Этот метод возвращает сообщение об ошибке или пустую строку. Они отлично работают сами по себе.

Затем я добавил еще один метод, который использует имя поля как «тип», который подается в оператор switch и решает, какой валидатор для вызова. Соответствующий отрывок:

<?php 
    class validate{ 
     public function valRequired($string){ 
      if(!empty($string)){ 
       return ""; 
      } 
      return "This field may not be blank"; 
     } 
     public function valField($value,$type){ 
      switch($type){ 
       case "city": 
        $this->valRequired($value); 
        break; 
      } 
     } 
    } 
?> 

Тогда я пытаюсь вызвать его:

$inputs=array(
    "city"=>"", 
); 
$val=new validate; 
$test=$val->valField($inputs['city'],"city"); 
echo $test; 

Нет выхода. var_dump ($ test) возвращает NULL.

$test=$val->valRequired($inputs['city']); 
echo $test; 

Возвращает ожидаемое сообщение об ошибке.

Последнее, что я пробовал, - это скопировать код из метода valRequired и вставить его в оператор switch вместо $ this-> valRequired ($ value). Это сработало, поэтому я чувствую, что это ошибка в том, как я вызываю метод valRequired внутри оператора switch.

Я уверен, что это что-то простое, но я только начинаю разбираться с ООП, и я очень взволнован тем, к чему это приведет. Спасибо за любой совет.

+1

Что вы ожидаете? Ваши функции dosnt 'возвращают что-либо - в любом случае, нет ничего, чтобы эхо. – davidkonrad

+0

также ваш возвращающийся 'return '"; 'который очистит значение use' return $ string; 'вместо –

+0

Спасибо за помощь всем, кто ответил. Я знал, что это будет что-то простое. – bran

ответ

1

Изменение, как показано ниже:

public function valField($value,$type){ 
     switch($type){ 
      case "city": 
       return $this->valRequired($value); 
     } 

Обратите внимание на return в случае.

+0

Не нужно 'break' после выражения' return' :) – Mark

+0

Aye .. Один из многих недостатков быстрой копии и вставки ... отредактировал :) – superphonic

0

Возвращаемое значение valRequired() никуда не годится, valField() ничего не возвращает.

? <-- $this->valRequired($value); 

Вам нужно return значение из valField:

return $this->valRequired($value); 
0

Это так, потому что вы не присвоить любое значение этому:

$this->valRequired($value); 

Ваш valRequired() метод возвращается пустая строка или сообщение об ошибке. Что он на самом деле делает: он возвратил сообщение об ошибке, но вы его не обрабатываете. Вместо того, чтобы вернуть его из метода valField(), как это:

case "city": 
return $this->valRequired($value); 
break; 

Это должно решить вашу проблему.

Смежные вопросы