PHP从多个函数访问变量

时间:2014-05-09 03:58:53

标签: 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
  }
 }
}

3 个答案:

答案 0 :(得分:1)

在类中使用实例变量,即..

class myClass {
    private $error = '';
    function test2()
    {
         //some code here
         $this->error = true;
         return $this->error;
    }

现在,您可以使用$this关键字访问其他函数中的错误变量 $this->error,这里有点reading

答案 1 :(得分:0)

由于您return 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
          }
    }
}

答案 2 :(得分:0)

根据您提交的代码方式,所有函数都返回一个布尔值。这意味着您可以在mainTest内部执行以下操作:

  

$ error = test1()|| TEST2();

这意味着,如果test1test2中的任何一个返回true,则error将设置为true。但如果它们都失败了,error就是假的。你可以多次使用||运算符,例如我的例子:

    function one(){
        return false;
    }

    function two(){
        return false;
    }

    function three(){
        return false;
    }

    $var = one() || two() && three();

    var_dump($var);

在此示例中,var将是设置为false的布尔变量。但是,如果三个函数中的任何一个返回true,那么var将是真实的。

有了这个,你在语义上说“一个或两个结果的结果或三个结果”。使用|| true优先于false,意味着任何事情都是真的,最终结果为true。

在您的示例中,使用类变量方法的问题是,如果test1()error设置为true,然后test2()将其设置为false,那该怎么办? 。可以克服这种问题,但是在mainTest函数中需要更多逻辑。基本上,您需要在每个函数后检查error的值。