子函数发生错误时如何从main函数返回值

时间:2014-02-03 07:49:55

标签: php

我需要从名为excute();

的main函数返回值
class twCrawlerCommand extends ContainerAwareCommand
{

    public function test(){
        $some.... // error happnes!!
            return '1'//errorcode '1';
    }

    public function excute(){
        $returncode = $this->test();
        if ($returncode){return $returncode;}

    }

}

在这段代码中,当test();

中出现错误时,我可以返回$ returncode

但是,如果函数嵌套更深或更复杂怎么办?

我认为一次一个地传递$ returncode可能有点笨拙。

有没有更好的方法将返回码传递给main函数?

6 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

class twCrawlerCommand extends ContainerAwareCommand {
    private errCode = 0;
    private function test() {
        $some.... // error happens!!
        $this->errCode = 1;
    }
    public function excute() {
        $this->test();
        if($this->errCode !== 0) {
            return $this->errCode;
            $this->errCode = 0; //reset
        }
    }
}

答案 1 :(得分:1)

在这种情况下,您的最佳选择可能是exceptions。他们的意图之一就是你想要的。例如:

function foo($x)
{
   if($x)
   {
      throw new Exception($x);
   }
   return 0;
}

function bar($y)
{
   try
   {
      foo($y);
      //some other logic here. Useful part of function
      //should be placed here
      return 'well done';
   }
   catch(Exception $e)
   {
      //for example, in case that you'll want to get not just code
      return $e->getMessage();
   }
}

echo bar(-1);//-1
echo bar(0);//well done

- 您可以通过错误处理控制执行,并将您的逻辑放入try部分,处理catch部分中的不同错误。请注意,您可以捕获许多不同的异常 - 因此它可能不止一个catch块。

答案 2 :(得分:0)

你应该看看exceptions

然后你的代码看起来像这样

class twCrawlerCommand extends ContainerAwareCommand
{

    public function test(){
        throw new \RuntimeException('Something wrong happened here');
    }

    public function excute(){
        try {
            $this->test();
        } catch (\RuntimeException $e) {
            // handle exception with message in $e->getMessage()
        }
   }

}

答案 3 :(得分:0)

您可以声明属性

class twCrawlerCommand extends ContainerAwareCommand
{
   public $last_error = false;

    public function test(){
        $some.... // error happnes!! 
            $this->last_error = "error description";
            return '1'//errorcode '1';
    }

    public function excute(){
        $returncode = $this->test();
        if ($returncode){return $returncode;}

    }

}

... 课外的某个地方:

if ($twCrawlerCommandInstance->execute() !== "0")
  echo("something bad happened: ".$twCrawlerCommandInstance->last_error);

答案 4 :(得分:0)

您必须使用例外。不知怎的,这样:

class twCrawlerCommand extends ContainerAwareCommand
{

    public function test(){
        $some.... // error happnes!!
            throw new Exception('', 1);//errorcode '1';
    }

    public function excute(){
        $returncode = 0;
        try {
            $this->test();
        }
        catch (Exception $e) {
            $returncode = $e->getCode();
        }
        if ($returncode){return $returncode;}

    }

}

答案 5 :(得分:0)

这个怎么样:

<?php

class twCrawlerCommand
{

    private $returncode = 0;
    public function test(){
            $this->returncode = 1;
    }

    public function execute(){
        $this->test();
        if (isset($this->returncode)){return $this->returncode;}
        return "";

    }

}

$foo = new twCrawlerCommand();
print $foo->execute() . "\n";
?>