Обзор сокращений PHP
Я программировал в PHP уже много лет, но я никогда не узнал, как использовать любую стенографию. Я время от времени сталкиваюсь с ним в коде, и мне сложно его прочитать, поэтому я хотел бы узнать, какая у него краткая стенограмма, которая существует для этого языка, чтобы я мог ее прочитать и начать экономить время/линии, используя это, но Я не могу найти исчерпывающий обзор всех сокращений.
Поиск Google в значительной степени исключительно показывает сокращение для операторов if/else, но я знаю, что должно быть больше, чем просто.
По сокращению, я говорю о таких вещах, как:
($var) ? true : false;
Ответы
Ответ 1
Вот некоторые из сокращенных операторов, используемых в 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];
Ответ 2
PHP 5.3:
$foo = $bar ?: $baz;
который присваивает значение $bar
- $foo
, если $bar
имеет значение true
(else $baz
).
Вы также можете вложить тернарный оператор (с правильным использованием скобок).
Кроме этого, об этом не так много. Возможно, вам захочется прочитать документацию .
Ответ 3
Один из моих любимых "трюков" в 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']}";
}
Еще одна интересная вещь: анонимные функции (и закрытие, введенное в PHP 5.3). Например, для каждого элемента массива на два, вы можете просто сделать следующее:
array_walk($array, function($v) { return $v * 2; });
Ответ 4
Никто не упомянул ??
!
// 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';
}
Ответ 5
Это называется оператором trernary, булевым оператором, который имеет три операнда:
Первое - это логическое выражение для оценки.
Второй - это выражение для выполнения, если логическое выражение имеет значение TRUE.
Третий - это выражение для выполнения, если логическое выражение имеет значение FALSE.
Ответ 6
Также новым в PHP7 является оператор космического корабля. В основном полезно в обратных вызовах для таких вещей, как usort()
.
До:
usort($list, function ($a, $b) {
if ($a == $b) return 0;
return $a < $b;
});
После:
usort($list, function ($a, $b) { return $a <=> $b; });
В основном, он возвращает отрицательное целое число, 0 или положительное целое число, основанное на сравнении левой стороны с правой стороной.
Ответ 7
Итак, Якоб Релкин абсолютно прав в том, что "стенография", которую вы упоминаете, действительно называется "тройным" оператором, и, как добавляет Сэм Дафель, он очень распространен на других языках. В зависимости от того, как язык реализует его, может быть, даже быстрее для сервера интерпретировать логику, а также позволить вам читать ее быстрее.
Поэтому иногда то, что помогает, когда вы изучаете новую логику или новые операторы, такие как это, нужно думать о том, что английский (или как-нибудь родной язык) подходит к нему. Опишите это в предложении. Поговорите в своем примере:
($var) ? true : false;
Что это должно читаться так:
Является ли $var true? Если $var is, возвращает значение true. Если $var является ложным, возвращает значение false.
Значок вопроса помогает напоминать вам, что вы задаете вопрос, который определяет вывод.
Более распространенный прецедент для тернарного оператора - это когда вы проверяете что-то, что не обязательно является логическим, но вы можете использовать логическую логику для ее описания. Возьмем, к примеру, объект Car
, который имеет свойство под названием color
, которое является строкоподобной переменной (в PHP). Вы не можете спросить, является ли строка истинным или ложным, потому что это не имеет смысла, но вы можете задать разные вопросы:
$output = $car->color == "blue" ? "Wheee this car is blue!" : "This car isn't blue at all.";
echo $output;
Итак, эта строка выглядит следующим образом:
Является ли цвет автомобиля таким же, как строка "синий"?
Если это так, верните строку "У этого автомобиля синий!" , в противном случае верните строку "Этот автомобиль совсем не синий".
Независимо от того, какой тройной оператор возвращается, используется в правой части оператора присваивания с помощью $output, и эта строка затем печатается.
Ответ 8
<?php
class Bob {
public function isDebug(){
return true;
}
public function debug(){
echo 'yes dice!!!';
}
}
$bob = new Bob();
($bob->isDebug()) && $bob->debug();
Вот еще одна версия сокращения.
Надеюсь, это поможет кому-то
Ответ 9
Начиная с 5.4 у вас также есть литералы массива, поэтому вам больше не нужно писать:
$myArray = array('some', 'list', 'of', 'stuff');
Вы можете просто написать:
$myArray = ['some', 'list', 'of', 'stuff'];
Не большая разница, но довольно мило.