Я программировал в PHP уже много лет, но я никогда не узнал, как использовать любую стенографию. Я время от времени сталкиваюсь с ним в коде, и мне сложно его прочитать, поэтому я хотел бы узнать, какая у него краткая стенограмма, которая существует для этого языка, чтобы я мог ее прочитать и начать экономить время / линии, используя это, но Кажется, я не могу найти исчерпывающий обзор всех сокращений.
Поиск Google в значительной степени исключительно показывает сокращенное выражение 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
если $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). Например, для каждого из элементов массива на два, вы можете просто сделать следующее:
array_walk($array, function($v) { return $v * 2; });
Это называется тернарным оператором, булевым оператором, который имеет три операнда:
Первое – это логическое выражение для оценки.
Второй – это выражение для выполнения, если логическое выражение имеет значение TRUE.
Третий – это выражение для выполнения, если логическое выражение оценивается как ЛОЖЬ.
Итак, Якоб Релкин абсолютно прав в том, что «стенография», которую вы упоминаете, действительно называется «тройным» оператором, и, как добавляет Сэм Дафел, он очень распространен на других языках. В зависимости от того, как язык реализует его, может быть, даже быстрее, чтобы сервер мог интерпретировать логику, а также позволить вам читать ее быстрее.
Поэтому иногда то, что помогает, когда вы изучаете новую логику или новые операторы, такие как это, нужно думать о том, что английский (или как бы то ни было ваш родной язык) подходит к нему. Опишите это в предложении. Давайте поговорим по вашему примеру:
($var) ? true : false;
Что это должно читать так:
Является ли $ var истинным? Если $ 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, и эта строка затем печатается.
<?php class bob { public function isDebug(){ return true; } public function debug(){ echo 'yes dice!!!'; } } $bob = new bob(); ($bob->isDebug()) && $bob->debug();
Вот еще одна версия стенографии. Надеюсь, это поможет кому-то
Никто не упоминал ??
!
<?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'; }
Также новым в PHP7 является оператор космического корабля. В основном полезно для обратных вызовов для таких вещей, как usort()
.
До:
usort($list, function ($a, $b) { if ($a == $b) return 0; return $a < $b; });
После:
usort($list, function ($a, $b) { return $a <=> $b; });
В принципе, он возвращает отрицательное целое число, 0 или положительное целое число, основанное на сравнении левой стороны с правой стороной.