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