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

PHP-массив vs [] в описании метода и переменной

У меня есть вопрос по поводу синтаксиса PHP.

При определении функций и переменных, какое соглашение я должен использовать?

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

переменные

public $varname = array();

или же

public $varname = [];

методы

public function foo($bar = array()){}

или же

public function foo($bar = []){}
4b9b3361

Ответ 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%