Shorthand 用于调换两个函数的执行顺序
Shorthand for swapping the order of execution of two functions
我正在寻找一种简化的方式来在 Php 中编写以下逻辑:
if condition do
function b
function a
else do
function a
function b
或者更确切地说,一种交换函数 a 和 b 执行顺序的简单方法。
这是我到目前为止的想法:
!$swap && a(); // Where $swap is a boolean
b();
$swap && a();
一个用例可能是更改显示输出的渲染顺序,例如html.
如果这是 Code Golf 的问题,我会尝试使用以下解决方案之一:
$f = $condition ? ['a', 'b'] : ['b', 'a'];
$f[0]();
$f[1]();
或
$f = ['a', 'b'];
$f[$condition]();
$f[!$condition]();
Demo.
但在正常的 php 脚本中,没有正当理由这样做。
你可以把它放在三元运算符中。 condition ? When true : when false;
。如果有多行代码,您可能必须将 when true 和 when false 放入函数中。
您可以将您的函数名称添加到一个数组中,然后如果您想以相反的顺序执行它们,则反转数组。如下所示:
$functions = ['a', 'b'];
$reverse = TRUE;
if( $reverse )
{
$functions = array_reverse( $functions );
}
$functions[0]();
$functions[1]();
这是太聪明的一个很好的例子。你的第一个例子看起来很棒!
记住你的代码应该被其他人阅读(或你自己,几周后),复制一点代码以提高可读性几乎总是值得的。
您可以使用包含两次迭代的循环来执行此操作。使用 if/else 包含每个函数调用作为循环内的语句。一个标志决定了哪个函数 运行。一次迭代后标志被切换,所以下一次另一个函数 运行s:
function a() {
echo 'a';
}
function b() {
echo 'b';
}
function c($flip = false) {
for($i=0; $i<2; $i++) {
if(! $flip) {
a();
} else {
b();
}
$flip = ! $flip; // On next run the other statement will run
}
}
c($flip = false);
c($flip = true);
// Outputs: abba
或者使用三元运算符:
function d($flip = false) {
for($i=0; $i<2; $i++, $flip=!$flip) {
!$flip ? a() : b();
}
}
在 html 视图中:
<?php for($i=0; $i<2; $i++) { if(! $flip) { // Change the block display order if flip is true. ?>
<h2>Block Foo</h2>
<p>...</p>
<?php } else { ?>
<h2>Block Bar</h2>
<p>...</p>
<?php } $flip = !$flip; } ?>
上下文是我编写了一个 CMS 模块,并希望为最终用户提供一个简单的选项来更改 html 的顺序,而无需覆盖模板。我希望有人觉得这有用。
我正在寻找一种简化的方式来在 Php 中编写以下逻辑:
if condition do
function b
function a
else do
function a
function b
或者更确切地说,一种交换函数 a 和 b 执行顺序的简单方法。
这是我到目前为止的想法:
!$swap && a(); // Where $swap is a boolean
b();
$swap && a();
一个用例可能是更改显示输出的渲染顺序,例如html.
如果这是 Code Golf 的问题,我会尝试使用以下解决方案之一:
$f = $condition ? ['a', 'b'] : ['b', 'a'];
$f[0]();
$f[1]();
或
$f = ['a', 'b'];
$f[$condition]();
$f[!$condition]();
Demo.
但在正常的 php 脚本中,没有正当理由这样做。
你可以把它放在三元运算符中。 condition ? When true : when false;
。如果有多行代码,您可能必须将 when true 和 when false 放入函数中。
您可以将您的函数名称添加到一个数组中,然后如果您想以相反的顺序执行它们,则反转数组。如下所示:
$functions = ['a', 'b'];
$reverse = TRUE;
if( $reverse )
{
$functions = array_reverse( $functions );
}
$functions[0]();
$functions[1]();
这是太聪明的一个很好的例子。你的第一个例子看起来很棒!
记住你的代码应该被其他人阅读(或你自己,几周后),复制一点代码以提高可读性几乎总是值得的。
您可以使用包含两次迭代的循环来执行此操作。使用 if/else 包含每个函数调用作为循环内的语句。一个标志决定了哪个函数 运行。一次迭代后标志被切换,所以下一次另一个函数 运行s:
function a() {
echo 'a';
}
function b() {
echo 'b';
}
function c($flip = false) {
for($i=0; $i<2; $i++) {
if(! $flip) {
a();
} else {
b();
}
$flip = ! $flip; // On next run the other statement will run
}
}
c($flip = false);
c($flip = true);
// Outputs: abba
或者使用三元运算符:
function d($flip = false) {
for($i=0; $i<2; $i++, $flip=!$flip) {
!$flip ? a() : b();
}
}
在 html 视图中:
<?php for($i=0; $i<2; $i++) { if(! $flip) { // Change the block display order if flip is true. ?>
<h2>Block Foo</h2>
<p>...</p>
<?php } else { ?>
<h2>Block Bar</h2>
<p>...</p>
<?php } $flip = !$flip; } ?>
上下文是我编写了一个 CMS 模块,并希望为最终用户提供一个简单的选项来更改 html 的顺序,而无需覆盖模板。我希望有人觉得这有用。