У меня возникла проблема с использованием переменной, сгенерированной в одной функции, как переменной во второй функции.Переменная scope - php - Использование переменных из одной функции в другую
Проблема:
Я получаю Примечание: Undefined переменной: параметр в функции валидации, на линии:
$this->$methodName($item,$value,$parameter) OR $valid=false;
Когда вызов функции для splitRulesAndParameters просто заменен кода внутри функции, проблема уходит.
Сценарий:
Следующие две функции находятся в классе Validator, во-первых, Validate, использует второй, splitRulesAndParameters
Вот функция Validate:
public function validate($data, $rules)
{
$valid= true;
foreach($rules as $item=>$ruleSet)
{
$ruleSetArray=explode('|',$ruleSet);
foreach($ruleSetArray as $rule)
{
$this->splitRulesAndParameters($rule);
$methodName='validate'.ucfirst($rule);
$value = isset($data[$item]) ? $data[$item] : NULL;
if(method_exists($this, $methodName))
{
$this->$methodName($item,$value,$parameter) OR $valid=false;
}
}
}
return $valid;
}
И вот функция splitRulesAndParameters
public function splitRulesAndParameters($rule)
{
$position = strpos($rule, ':');
if($position !==false)
{
$parameter = substr($rule,$position + 1);
$rule = substr($rule,0,$position);
}
else
{
$parameter='';
}
}
Имеет смысл: '$ parameter' никогда не объявляется ... PHP создаст для вас новую переменную (и инициализирует ее до« null »), но она (по праву) выдаст уведомление –
Измените свои' splitRulesAndParameters () ', чтобы вернуть массив' $ rule' и '$ parameter', и использовать значения из этого массива в вызове' $ this -> $ methodName ($ item, $ value, $ parameter) '.... или использовать свойства объекта для '$ this-> rule' и' $ this-> parameter' .... или даже рефакторинг для использования выделенного класса 'Rule' –
См. это недавнее сообщение http://stackoverflow.com/questions/25842231/pass-php-var-from-one-function-to-another/25842271 # 25842271 и мой комментарий к сообщению –