我想在 PHP 中返回多个嵌套函数。可以通过在“break”之后添加一个数字来打破多个循环。例如。
while(1)
while(1)
while(1)
break 3;
我可以在调用一系列函数时进行断路吗?
我想在 PHP 中返回多个嵌套函数。可以通过在“break”之后添加一个数字来打破多个循环。例如。
while(1)
while(1)
while(1)
break 3;
我可以在调用一系列函数时进行断路吗?
据我所知,它的设计也不是很健康,因为相关的父母和祖父母功能永远不会知道中断。您应该抛出一个异常并在父级上捕获它,而父级又会抛出一个异常并在祖父母上捕获它等。
要“打破”功能,您可以使用return
.
function somefunction()
{
return;
echo 'This will never get displayed';
}
另一种解决方案是为每个时间添加一个条件。
while(1 && $isTrue)
while(1 && $isTrue)
while(1 && $isTrue)
$isTrue = false;
break;
虽然我不认为这是一个非常干净的方法。
由于手动状态break 仅用于循环。
在这种情况下我所做的是有一个异常返回值(或对象)并在每个函数返回点对返回值进行值检查,以确保情况得到适当传播或处理,但在进行递归时要小心,你可能错误地完全折叠树....顺便说一句,如果这是在错误情况下的简单退出,您也可以使用异常。
可以从子函数返回一个特殊的结果,表明一个特定的条件已经满足。WordPress 使用 WP_Error 和is_wp_error()
进行此类操作。任何数量的嵌套函数都可以检查被调用函数是否返回错误状态,并选择将该错误向上传递而不是继续处理。
例子:
function outer() {
$result = inner();
// pass failure back to parent
if( is_wp_error($result) ) {
return $result;
}
// other processing
return $final_result;
}
function inner() {
if( some_condition() ) {
// generate an error
return new WP_Error( 'code', 'message' );
}
return $other_result;
}
$result = outer();
// did we get an error?
if( is_wp_error($result) ) {
echo 'Something went wrong.';
} else {
echo $result;
}
是的,您可以非常简单地构建一个“无主体”while()
或if()
块。通常,您会看到符合 PSR-12 的 PHP 代码{}
用于结束循环/条件块的主体,但主体不是必需的。在行尾写一个分号就足够了,您的 IDE 不会抱怨语法错误。
从每个函数返回一个真实值将足以表明以下函数已被授权执行。
这将提供所需的“短路”功能,而无需创建嵌套控制结构或将变量传递到不同的范围。
我将使用一系列通用函数进行演示:
function echo1T() {
echo "1";
return true;
}
function echo2T() {
echo "2";
return true;
}
function echo3T() {
echo "3";
return true;
}
function echo1F() {
echo "1";
return false;
}
function echo2F() {
echo "2";
return false;
}
function echo3F() {
echo "3";
return false;
}
代码:(更多场景的Demo)
while (echo1T() && echo2F() && echo3T()); // outputs: 12
if (echo1T() && echo2F() && echo3T()); // outputs: 12
$return = echo1T() && echo2F() && echo3T(); // outputs: 12
var_export($return); // outputs false