如果我有一个类内部的函数,并且我返回“无效”,我怎么能在顶部函数开始备份?
function test(){
//curl here
//other stuff here
if(strpos($data, 'invalid')){
print "invalid";
//discard and remove
continue ;
}
}
但是我收到以下错误,“致命错误:无法在
中断/继续1级如果我被“无效”命中,我想重新启动test()...
答案 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'。
或者如果你想开始处理,你应该把你的逻辑放到一个循环中。