Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php函数之外传递变量_Php_Function - Fatal编程技术网

在php函数之外传递变量

在php函数之外传递变量,php,function,Php,Function,我有一个检查表单验证的函数。如果有错误,则有一个名为$error的变量。我如何使它在这个函数之外和这个页面的其余部分,不管函数是否在内部,都知道设置了$error 不过我不想把它转到另一页。我知道存在全局错误,但由于我在一个函数中启动$error,我猜它在其他函数中不可用 有什么想法吗?如果您想通过以下方式设置和使用全局变量: 这种阵列随处可见。所以要小心。我会这样做的 函数验证($form,&$errors) { //设置erros变量的一些代码 返回false; } 由于$erros是通过引

我有一个检查表单验证的函数。如果有错误,则有一个名为$error的变量。我如何使它在这个函数之外和这个页面的其余部分,不管函数是否在内部,都知道设置了$error

不过我不想把它转到另一页。我知道存在全局错误,但由于我在一个函数中启动$error,我猜它在其他函数中不可用


有什么想法吗?

如果您想通过以下方式设置和使用全局变量:


这种阵列随处可见。所以要小心。

我会这样做的
函数验证($form,&$errors)
{
//设置erros变量的一些代码
返回false;
}


由于$erros是通过引用传递的,因此函数可以设置它的值。但是变量本身仍然在调用代码的范围内。

我宁愿返回它,并检查它的count()(我通常在数组中放入错误)。如果大于0,则有错误,否则就没有错误。

我有一个表单类,其中包含一个记录错误的静态变量。例如:

<?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或会话会很快变得混乱,这是另一个选项。

您想要一个全局可访问的变量,而不是全局变量?您可以寻找一个表单库,以一致且可访问的方式处理此类变量。因此,如果您返回该变量,您将使该变量可用于最初调用原始函数的任何页面,对吗?问题在于函数检查验证,然后查看是否存在任何错误,如果存在,则将这些错误发送给另一个函数以正确显示错误消息。所以,如果我在最后一个函数中返回它,它会返回到另一个函数还是主页?我对你的问题有点不清楚(太多了)。然而,它类似于(在validate调用者内部,伪代码):errors=validate(…);如果计数(错误)>0,则显示错误(错误);所以,如果值是$error,这是一个字符串,那么现在$\u GLOBALS['error']在任何地方都可用,即使它是在函数中创建的?一旦我在我的函数中设置了$_GLOBALS['error'],它就会看到它被设置了,但当我在另一个函数中调用相同的东西时,它却不知道它被设置了。当然,我在设置它的初始函数之后调用后面的函数,它是一个全局函数。它随处可见(通过超全局)。你为什么不试试呢?很典型。回答了这个问题,结果被否决了。是的,使用globals不是一个好的做法,但问题是他如何访问代码中所有地方的验证结果。@yi_H:OP确实特别要求这样做。就像静态类成员是全局的一样,这也是一样。@yi\u H:编辑您的问题时,您使用了错误的变量名,一个小链接总是很有帮助的。此外,您可以将字段名传递给所有这些内容,并进一步加强这些内容,以便在验证失败时,您可以针对输入字段向字段添加“错误”类。
<?php
function myvalidate($value) {
  // if this validation fails
  form::setError('Field is required');
}
?>