передача переменных вне функций php - PullRequest
2 голосов
/ 09 июля 2011

У меня есть функция, которая проверяет проверку формы.Если есть ошибка, то есть переменная с именем $ error.Как сделать так, чтобы вне этой функции и остальной части этой страницы независимо от того, была ли внутри функция или нет, знать, что установлена ​​$ error?

Я не хочу переносить ее на другую страницухоть.Я знаю, что есть глобальная переменная, но так как я инициирую ошибку $ в функции, я думаю, она недоступна в других функциях.

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 09 июля 2011

Я бы сделал так
function validate($form, &$errors)<br> {<br> // some code that sets the erros variable<br> return false;<br> }

Поскольку $ erros передается по ссылке, функция может установить его значение. Но сама переменная остается в области действия вызывающего кода.

2 голосов
/ 09 июля 2011

Если вы хотите установить и использовать глобальную переменную через superglobal $GLOBALS array PHP Manual :

$GLOBALS['error'] = value;

Этот массив доступен везде.Так что береги себя.

1 голос
/ 09 июля 2011

У меня есть класс формы со статической переменной внутри, которая регистрирует ошибки. Например:

<?php
class form {
  //this is our array to hold fields that have errored so we can apply an error class to the input fields
  static public $errors = array();
  static public function setError($error) {
    self::$errors[] = $error;
  }
  static public function parseErrors() {
    $output .= '<ul>';
    foreach(self::$errors as $message) {
      $output .= '<li>'.$message.'</li>';
    }
    $output .= '</ul>';
    return $output;
  }
  //... other functions
}
?>

Затем, чтобы регистрировать ошибки из ваших функций проверки, вы можете сделать что-то вроде этого:

<?php
function myvalidate($value) {
  // if this validation fails
  form::setError('Field is required');
}
?>

Тогда просто вызовите parseErrors, чтобы выплюнуть ваши ошибки. Обратите внимание, что это всего лишь фрагменты. У меня действительно есть класс logger, который взаимодействует с классом формы, изменил его для консолидации.

Я предпочитаю делать что-то подобное, чем использовать GLOBALS, это может привести к очень быстрому беспорядку, если использовать GLOBALS или SESSION в этом отношении, что является еще одним вариантом.

0 голосов
/ 09 июля 2011

Я бы предпочел вернуть его и проверить его количество () (я обычно помещаю ошибки в массив).Если это> 0, то есть ошибки, в противном случае нет.

...