我需要从名为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函数?
答案 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";
?>