Краткий обзор PHP - PullRequest
       8

Краткий обзор PHP

34 голосов
/ 31 декабря 2010

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

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

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

($var) ? true : false;

Ответы [ 9 ]

68 голосов
/ 31 декабря 2010

Вот некоторые из сокращенных операторов, используемых в 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];
22 голосов
/ 31 декабря 2010

В PHP 5.3 введено:

$foo = $bar ?: $baz;

, которое присваивает значение $bar $foo, если $bar оценивается как true (иначе $baz).

Вы также можете вкладывать троичный оператор (при правильном использовании скобок).

Кроме этого, в этом нет ничего особенного.Возможно, вы захотите прочитать документацию .

16 голосов
/ 31 декабря 2010

Одним из моих любимых "приемов" в 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 голосов
/ 19 апреля 2017

Никто не упоминал ??!

<?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';
}
3 голосов
/ 31 декабря 2010

Это называется троичный оператор , логический оператор, который имеет три операнда:

Первым является логическое выражение для оценки.

Вторым является выражениевыполняется, если логическое выражение имеет значение TRUE.

Третье - это выражение, которое выполняется, если логическое выражение имеет значение FALSE.

2 голосов
/ 13 сентября 2017

Также новым в PHP7 является оператор космического корабля. В основном полезен в обратных вызовах для таких вещей, как usort().

До:

usort($list, function ($a, $b) {
    if ($a == $b) return 0;
    return $a < $b;
});

После того, как:

usort($list, function ($a, $b) { return $a <=> $b; });

По сути, он возвращает отрицательное целое число 0 или положительное целое число, основываясь на сравнении левой и правой сторон.

1 голос
/ 29 мая 2014
<?php
class Bob {

    public function isDebug(){
        return true;
    }

    public function debug(){
        echo 'yes dice!!!';
    }
}


$bob = new Bob(); 

($bob->isDebug()) && $bob->debug(); 

Вот еще одна версия сокращения.Надеюсь, это кому-то поможет

1 голос
/ 15 января 2011

Итак, Джейкоб Релкин абсолютно прав в том, что упомянутая вами «стенография» действительно называется «троичным» оператором, и, как добавляет Сэм Дюфель, она очень распространена в других языках.В зависимости от того, как язык его реализует, сервер может даже быстрее интерпретировать логику, а также быстрее читать ее.

Так что иногда помогает, когда вы изучаете новый фрагментлогика или новые операторы, такие как этот, должны думать об английском (или о том, какой у вас родной язык), чтобы соответствовать ему.Опишите это в предложении.Давайте поговорим о вашем примере:

($var) ? true : false;

Что это должно читаться следующим образом:

Является ли $ var true? Если $ 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;

Таким образом, эта строка выглядит следующим образом:

Является ли цвет автомобиля таким же, как и строка "синий"?
Если это так, возвращает строку "Где этот автомобиль синий!" , в противном случае возвращаетstring «Этот автомобиль вовсе не синий».

Все, что возвращает троичный оператор, используется в правой части оператора присваивания с $ output, и эта строка затем печатается.

0 голосов
/ 05 января 2018

Начиная с версии 5.4 у вас также есть литералы массива, поэтому вам больше не нужно писать:

$myArray = array('some', 'list', 'of', 'stuff');

Вы можете просто написать:

$myArray = ['some', 'list', 'of', 'stuff'];

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

...