PHP-массив vs [] в описании метода и переменной
У меня есть вопрос по поводу синтаксиса PHP.
При определении функций и переменных, какое соглашение я должен использовать?
Я знаю, что они делают то же самое на практике, но я хотел бы знать, какой метод соответствует стандартам наилучшей практики.
переменные
public $varname = array();
или же
public $varname = [];
методы
public function foo($bar = array()){}
или же
public function foo($bar = []){}
Ответы
Ответ 1
PSR-2 (Группа взаимодействия PHP Framework) не упоминает синтаксис коротких массивов. Но, как вы можете видеть в главе 4.3, они используют короткий синтаксис массива, чтобы установить значение по умолчанию $arg3
как пустой массив.
Итак, для PHP >= 5.4 синтаксис короткого массива, по-видимому, является стандартом де-факто. Используйте только array()
, если вы хотите, чтобы ваш script запускался на PHP < 5.4.
Ответ 2
из PHP docs:
Начиная с PHP 5.4 вы также можете использовать синтаксис короткого массива, который заменяет array() на [].
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// as of PHP 5.4
$array = [
"foo" => "bar",
"bar" => "foo",
];
?>
если вы попытаетесь использовать нотацию "[]" в более ранней версии, чем 5.4, она не удастся, и PHP будет бросать syntax error
для обратной совместимости вы должны использовать синтаксис array()
.
Ответ 3
Это зависит от того, какую версию PHP вы настраиваете. Для лучшей обратной совместимости, я бы рекомендовал вам использовать array(). Если вам не нравятся более старые версии (< PHP 5.4), я рекомендую вам использовать более короткую версию.
Ответ 4
только что сделал тест, чтобы увидеть, как [] выполняет массив() вот что я получил
testing 1 million []s ( with $arr[] = [] )
started at : 1561298821.8754
ended at: 1561298822.6881
difference: 0.81266021728516 seconds
testing 1 million array()s ( with array_push( $arr, array()) )
started at : 1561298822.6881
ended at: 1561298823.843
difference: 1.1549289226532 seconds
testing 1 million []s ( again while the processor is hotter)
started at : 1561298823.8431
ended at: 1561298824.7448
difference: 0.9017219543457 seconds
поэтому [] быстрее примерно на 20%