PHP从多个函数访问变量

PHP从多个函数访问变量,php,function,class,variables,Php,Function,Class,Variables,新手的问题,但我是一个新手在这个 我有一个用于注册用户的类,还有用于不同验证的函数。基本上,我运行“mainTest”,它从表单中提取变量,然后运行每个函数(test1、test2)。在这些函数中,如果函数中没有验证,我会将一个名为$error的变量设置为true。我试图在“mainTest”函数中执行的操作检查变量$error是否已在任何其他函数中设置为true,但当我回显$error变量时,它只显示null,即函数未链接。(尝试不使用全局变量) 这里的任何想法都是我如何做到这一点的一个例子

新手的问题,但我是一个新手在这个

我有一个用于注册用户的类,还有用于不同验证的函数。基本上,我运行“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抱歉,我一定是忘记了。我会及时纠正的。编辑:答案已更新