我已经用PHP编程多年了,但我从未学过如何使用任何速记。我不时在代码中遇到它并且很难阅读它,所以我想学习该语言存在的不同简写,以便我可以阅读它并开始使用它来节省时间/行,但是我似乎无法全面了解所有简写。
谷歌搜索几乎只显示if / else语句的简写,但我知道必须有更多。
简而言之,我说的是:
($var) ? true : false;
答案 0 :(得分:68)
以下是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];
答案 1 :(得分:22)
PHP 5.3介绍:
$foo = $bar ?: $baz;
如果$bar
评估为$foo
(否则为$bar
),会将true
的值分配给$baz
。
您也可以嵌套三元运算符(正确使用括号)。
除此之外,没有其他相关内容。您可能需要阅读documentation。
答案 2 :(得分:16)
PHP中我最喜欢的“技巧”之一是在处理诸如带有参数数组的函数之类的情况时使用array union运算符,然后回退到默认值。
例如,考虑以下接受数组作为参数的函数,并且需要知道设置了键'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']}";
}
另一个有趣的事情是anonymous functions,(以及在PHP 5.3中引入的闭包)。例如,要将数组的每个元素乘以2,您可以执行以下操作:
array_walk($array, function($v) { return $v * 2; });
答案 3 :(得分:4)
没人提到??
!
<?php
// 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';
}
答案 4 :(得分:3)
这称为三元运算符,一个有三个操作数的布尔运算符:
第一个是要评估的布尔表达式。
第二个是如果布尔表达式求值为TRUE则执行的表达式。
第三个是如果布尔表达式求值为FALSE则执行的表达式。
答案 5 :(得分:2)
PHP7中的新功能还是宇宙飞船运营商。在usort()
之类的回调中非常有用。
在:
usort($list, function ($a, $b) {
if ($a == $b) return 0;
return $a < $b;
});
后:
usort($list, function ($a, $b) { return $a <=> $b; });
基本上,它根据左侧与右侧的比较返回负整数0或正整数。
答案 6 :(得分:1)
所以,Jacob Relkin绝对正确,你所提到的“速记”确实被称为“三元”算子,正如Sam Dufel所说,它在其他语言中非常普遍。根据语言的实现方式,服务器甚至可以更快地解释逻辑,并让您更快地阅读它。
因此,有时候当你学习一条新的逻辑或者像这样的新操作符时,有什么帮助才能想到英语(或者你的母语是什么)来适应它。用句子描述它。让我们来谈谈你的例子:
($var) ? true : false;
这应该是这样的:
$ var是真的吗?如果$ var是,返回值true 。如果$ var为false,将返回值false 。
问号有助于提醒您,您正在询问确定输出的问题。
三元运算符的一个更常见的用例是当你检查一些不一定是布尔值的东西时,你可以使用布尔逻辑来描述它。以对象Car
为例,它具有一个名为color
的属性,它是一个类似字符串的变量(在PHP中)。你不能问一个字符串是真还是假,因为这没有意义,但你可以提出不同的问题:
$output = $car->color == "blue" ? "Wheee this car is blue!" : "This car isn't blue at all.";
echo $output;
所以这一行内容如下:
汽车的颜色是否与字符串“蓝色”相同?
如果是,返回字符串“Whee this car is blue!”,否则返回字符串“这辆车根本不是蓝色。”
无论三元运算符返回的是在带有$ output的赋值语句的右侧使用,然后打印该字符串。
答案 7 :(得分:1)
<?php
class Bob {
public function isDebug(){
return true;
}
public function debug(){
echo 'yes dice!!!';
}
}
$bob = new Bob();
($bob->isDebug()) && $bob->debug();
这是速记的另一个版本。 希望这有助于某人
答案 8 :(得分:0)
从5.4开始,你也有数组文字,所以你不再需要写:
$myArray = array('some', 'list', 'of', 'stuff');
你可以写:
$myArray = ['some', 'list', 'of', 'stuff'];
没有太大的区别,但非常好。