我已经用 PHP 编程多年了,但我从来没有学会如何使用任何简写。我不时在代码中遇到它并且很难阅读它,所以我想学习该语言存在的不同速记,以便我可以阅读它并开始通过使用它来节省时间/行,但是我似乎无法找到所有速记的全面概述。
谷歌搜索几乎完全显示了 if/else 语句的简写,但我知道肯定不止这些。
简而言之,我说的是这样的东西:
($var) ? true : false;
以下是 PHP 中使用的一些速记运算符。
//If $y > 10, $x will say 'foo', else it'll say 'bar'
$x = ($y > 10) ? 'foo' : 'bar';
//Short way of saying <? print $foo;?>, useful in HTML templates
<?=$foo?>
//Shorthand way of doing the for loop, useful in html templates
for ($x=1; $x < 100; $x++):
//Do something
end for;
//Shorthand way of the foreach loop
foreach ($array as $key=>$value):
//Do something;
endforeach;
//Another way of If/else:
if ($x > 10):
doX();
doY();
doZ();
else:
doA();
doB();
endif;
//You can also do an if statement without any brackets or colons if you only need to
//execute one statement after your if:
if ($x = 100)
doX();
$x = 1000;
// PHP 5.4 introduced an array shorthand
$a = [1, 2, 3, 4];
$b = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];
PHP 5.3 引入:
$foo = $bar ?: $baz;
它将值分配$bar
给$foo
if$bar
评估为true
(else $baz
)。
您还可以嵌套三元运算符(正确使用括号)。
除此之外,没有太多关于它的东西。您可能想阅读文档。
我在 PHP 中最喜欢的“技巧”之一是在处理诸如采用参数数组的函数、使用默认值等情况时使用数组联合运算符。
例如,考虑以下函数,它接受一个数组作为参数,并且需要知道键'color'
、'shape'
和 ' size
' 已设置。但也许用户并不总是知道这些会是什么,所以你想为他们提供一些默认值。
在第一次尝试时,人们可能会尝试这样的事情:
function get_thing(array $thing)
{
if (!isset($thing['color'])) {
$thing['color'] = 'red';
}
if (!isset($thing['shape'])) {
$thing['shape'] = 'circle';
}
if (!isset($thing['size'])) {
$thing['size'] = 'big';
}
echo "Here you go, one {$thing['size']} {$thing['color']} {$thing['shape']}";
}
但是,使用数组联合运算符可以是一个很好的“速记”,可以使这个更清晰。考虑以下函数。它具有与第一个完全相同的行为,但更清楚:
function get_thing_2(array $thing)
{
$defaults = array(
'color' => 'red',
'shape' => 'circle',
'size' => 'big',
);
$thing += $defaults;
echo "Here you go, one {$thing['size']} {$thing['color']} {$thing['shape']}";
}
另一个有趣的事情是匿名函数,(和闭包,在 PHP 5.3 中引入)。例如,要将数组的每个元素乘以 2,您只需执行以下操作:
array_walk($array, function($v) { return $v * 2; });
没人提??
!
// Example usage for: Null Coalesce Operator
$action = $_POST['action'] ?? 'default';
// The above is identical to this if/else statement
if (isset($_POST['action'])) {
$action = $_POST['action'];
} else {
$action = 'default';
}
这称为三元运算符,一个具有三个操作数的布尔运算符:
第一个是要评估的布尔表达式。
第二个是当布尔表达式计算为 TRUE 时要执行的表达式。
第三个是布尔表达式计算结果为 FALSE 时要执行的表达式。
PHP7 中还新增了 spaceship 运算符。主要用于回调之类的东西usort()
。
前:
usort($list, function ($a, $b) {
if ($a == $b) return 0;
return $a < $b;
});
后:
usort($list, function ($a, $b) { return $a <=> $b; });
基本上,它根据左侧与右侧的比较返回负整数、0 或正整数。
因此,Jacob Relkin 绝对正确,因为您提到的“速记”确实被称为“三元”运算符,并且正如 Sam Dufel 所补充的,它在其他语言中非常普遍。根据语言的实现方式,服务器甚至可能更快地解释逻辑,并让您更快地阅读它。
因此,有时当您学习新的逻辑或新的运算符(例如这个)时,帮助您考虑英语(或任何您的母语)来适应它。用一句话来形容。让我们通过你的例子来谈谈:
($var) ? true : false;
这应该是这样的:
$var 是真的吗? 如果 $var 是,则返回值 true。如果 $var 为 false,则返回值 false。
问号有助于提醒您所问的问题决定了输出。
三元运算符更常见的用例是当您检查不一定是布尔值的东西时,但您可以使用布尔逻辑来描述它。以 object 为例Car
,它有一个名为 的属性color
,它是一个类似字符串的变量(在 PHP 中)。你不能问一个字符串是真还是假,因为那没有意义,但你可以问不同的问题:
$output = $car->color == "blue" ? "Wheee this car is blue!" : "This car isn't blue at all.";
echo $output;
所以这一行如下:
汽车的颜色和字符串“blue”一样吗?
如果是,则返回字符串“Whee this car is blue!” ,否则返回字符串“这辆车根本不是蓝色的。”
无论三元运算符返回什么,都将在带有 $output 的赋值语句的右侧使用,然后打印该字符串。
<?php
class Bob {
public function isDebug(){
return true;
}
public function debug(){
echo 'yes dice!!!';
}
}
$bob = new Bob();
($bob->isDebug()) && $bob->debug();
这是另一个版本的速记。希望这可以帮助某人
从 5.4 开始,您还拥有数组文字,因此您不再需要编写:
$myArray = array('some', 'list', 'of', 'stuff');
你可以写:
$myArray = ['some', 'list', 'of', 'stuff'];
差别不大,但相当不错。