PHP从多个函数访问变量
新手的问题,但我是一个新手在这个 我有一个用于注册用户的类,还有用于不同验证的函数。基本上,我运行“mainTest”,它从表单中提取变量,然后运行每个函数(test1、test2)。在这些函数中,如果函数中没有验证,我会将一个名为$error的变量设置为true。我试图在“mainTest”函数中执行的操作检查变量$error是否已在任何其他函数中设置为true,但当我回显$error变量时,它只显示null,即函数未链接。(尝试不使用全局变量) 这里的任何想法都是我如何做到这一点的一个例子PHP从多个函数访问变量,php,function,class,variables,Php,Function,Class,Variables,新手的问题,但我是一个新手在这个 我有一个用于注册用户的类,还有用于不同验证的函数。基本上,我运行“mainTest”,它从表单中提取变量,然后运行每个函数(test1、test2)。在这些函数中,如果函数中没有验证,我会将一个名为$error的变量设置为true。我试图在“mainTest”函数中执行的操作检查变量$error是否已在任何其他函数中设置为true,但当我回显$error变量时,它只显示null,即函数未链接。(尝试不使用全局变量) 这里的任何想法都是我如何做到这一点的一个例子
class myClass {
private function test1($var1, $var2) {
if....
else {
$error = true;
return $error;
}
}
private function test2($var3, $var4) {
if....
else {
$error = true;
return $error;
}
}
public function mainTest($var1, $var2, $var3, $var4) {
$this->test1($var1, $var2);
$this->test2($var3, $var4);
if ($error == true) {
//do something
}
}
}
在类ie中使用实例变量
class myClass {
private $error = '';
function test2()
{
//some code here
$this->error = true;
return $this->error;
}
现在,您可以使用$this
关键字访问其他函数中的错误变量
$this->error
,这里有一点,因为您正在返回
布尔值TRUE
,您可以查看每个函数的输出,看看它是否为TRUE
:
public function mainTest($var1, $var2, $var3, $var4) {
if ($this->test1($var1, $var2) === TRUE) || $this->test2($var3, $var4) === TRUE) {
// an error occurred, because your function returned a TRUE boolean
}
}
如果想重新构造代码,可以将公共变量声明为类的一部分,并使用函数进行设置
class myClass {
// ...
private $error;
private function test1($var1, $var2) {
if....
else {
$this->error = true;
}
}
// ...
public function mainTest($var1, $var2, $var3, $var4) {
$this->test1($var1, $var2);
$this->test2($var3, $var4);
if ($this->error === TRUE) {
// an error occurred
}
}
}
根据您以代码方式提交的内容,所有函数都返回布尔值。这意味着在
mainTest
中,您可以执行以下操作:
$error=test1()| test2()
这意味着如果test1
或test2
中的任何一个返回true,error
将设置为true。但如果它们都失败,error
为false。您可以多次使用|
操作符,以我的小例子为例:
function one(){
return false;
}
function two(){
return false;
}
function three(){
return false;
}
$var = one() || two() && three();
var_dump($var);
在本例中,var
将是一个布尔变量,设置为false。然而,如果这三个函数中的任何一个返回true,var
将是corse的true
这样,你就在语义上说“一的结果、二的结果或三的结果。”而|
true优先于false,这意味着任何事情都是真的,最终结果都是真的
在您的示例中,使用其他人建议的类变量方法的问题是,如果
test1()
将error
设置为true,然后test2()
将其设置为false,该怎么办。这种情况是可以克服的,但是在mainTest
功能中需要更多的逻辑。基本上,您需要在每个函数之后检查error
的值 在类myClass
之后的顶部声明变量,并按以下方式使用$this->error
()将$error
声明为实例变量。如果第一个函数遇到错误,其他函数是否仍应运行?良好的做法是将getter和setter分开functionality@UlrichHorus我不同意。直接从类内部调用实例变量是完全可以接受的。请注意,实例变量是私有的,所有这一切都是为了维护当前返回错误的功能,同时设置实例变量。它没有做任何事情,我会说这是“糟糕的做法”,然后你应该相应地定义两个方法:setError和getErroronly,如果你在类外使用它们。。。此数据仍封装在类范围内。在类中不需要使用getter和setter,我可以称之为overkill。如果实例变量是私有的,则不能在子类中对其进行更改,因此为您甚至无法访问的对象重写getter或setter是没有用的。如果变量受到保护,我可能会同意使用getter和setter,以防实现需要更改,我认为您只是在试图欺骗我,因此我将以此结束。您的解决方案有一些语法错误,例如private var$error代码>、访问修饰符private和var都不允许在php中定义变量。@kuldeep.kamboj抱歉,我一定是忘记了。我会及时纠正的。编辑:答案已更新