Обзор сокращений PHP

Я программировал в 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 или положительное целое число, основанное на сравнении левой стороны с правой стороной.