启动功能,取决于IF语句的结果

时间:2011-03-24 00:12:53

标签: php

如果我有一个类内部的函数,并且我返回“无效”,我怎么能在顶部函数开始备份?

function test(){

//curl here

//other stuff here

if(strpos($data, 'invalid')){
    print "invalid";
           //discard and remove
    continue ;
}

}

但是我收到以下错误,“致命错误:无法在

中断/继续1级

如果我被“无效”命中,我想重新启动test()...

6 个答案:

答案 0 :(得分:8)

你可能想在这里使用递归函数:

function test(){

    //curl here

    //other stuff here

    if(strpos($data, 'invalid')){
        print "invalid";
           //discard and remove
        return test() ; // restart process
    }
}

或者,这可能是({非常罕见的]良好使用goto运算符:

function test(){
    start:
    //curl here

    //other stuff here

    if(strpos($data, 'invalid')){
        print "invalid";
           //discard and remove
        goto start;
    }
}

请注意,这只适用于PHP> = 5.3。

答案 1 :(得分:1)

删除continue;,然后添加test();。它被称为递归函数(自称)。

答案 2 :(得分:1)

我会使用exceptions,让调用范围控件重复test()的调用。 test()执行一项工作;当被要求执行该工作时,它不应该控制

(在其他示例中给出的递归方法并不真正适合用例[并且让我感到紧张,多亏了语言,递归次数太多会让你最终耗尽堆栈空间;当然你填满你的堆栈没有理由],虽然goto可以正常工作但它仍然赋予功能本身太多的权力。)

function test()
{
    //curl here
    //other stuff here

    if (strpos($data, 'invalid'))
        throw new Exception("Data is invalid");
}

function callingFunction()
{
   while (true) {
      try {
         test();
         break;  // only reached if test() didn't throw
      }
      catch(Exception $e) {} // if we fall into this, the loop repeats
   }
}

您仍然可以使用此方法非常干净地应用goto

function test()
{
    //curl here
    //other stuff here

    if (strpos($data, 'invalid'))
        throw new Exception("Data is invalid");
}

function callingFunction()
{
startTest:
   try {
      test();
   }
   catch(Exception $e) {
      goto startTest;
   }
}

希望有所帮助。

答案 3 :(得分:0)

有几种方法可以做到,我老师通常建议的方法是再次实际调用该功能。

function test(){

    //curl here

    //other stuff here

    if(strpos($data, 'invalid')){ 
         print "invalid"; 
         //discard and remove continue ; 
         test();
         return;
    }

}

我的回答可能不是最好的,希望这有帮助。

答案 4 :(得分:0)

假设您事先更改了参数,可以使用新参数再次递归调用该函数。只需确保函数将停止递归的边缘情况。至于那个,我需要看到真实的代码告诉你。

function test($data){

//curl here

//other stuff here

if(strpos($data, 'invalid')){
    print "invalid";
           //discard and remove
    test($NEW_DATA);
}

}

答案 5 :(得分:0)

如果你想要突破你目前所处的功能,你应该使用'return'而不​​是'continue'。

或者如果你想开始处理,你应该把你的逻辑放到一个循环中。