Подтвердить что ты не робот

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

Я программировал в PHP уже много лет, но я никогда не узнал, как использовать любую стенографию. Я время от времени сталкиваюсь с ним в коде, и мне сложно его прочитать, поэтому я хотел бы узнать, какая у него краткая стенограмма, которая существует для этого языка, чтобы я мог ее прочитать и начать экономить время/линии, используя это, но Я не могу найти исчерпывающий обзор всех сокращений.

Поиск Google в значительной степени исключительно показывает сокращение для операторов if/else, но я знаю, что должно быть больше, чем просто.

По сокращению, я говорю о таких вещах, как:

($var) ? true : false;
4b9b3361

Ответ 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'];

Не большая разница, но довольно мило.