Какие последствия не объявлять переменные в PHP?


В php я могу сделать это без объявления/определения переменных:

echo($foo);  //resolve: vazio, sem nada
$foo++;
echo($foo);  // resolve: 1

с Помощью var_dump() же, соответственно NULL и 1.
Если я использую settype($foo, "integer"); раньше , то же самое дает 0и 1.

вопрос В том, есть ли последствия для производительности,использования или другую, которая оправдывала избежать этих целей:

//usar um contador sem o defenir ou resetar primeiro
$foo++;

// adicionar elementos a uma array 
// sem os defenir $bar = array('2010'=>0,'2011'=>0); primeiro
$bar['2010']++; 
$bar['2010']++;
$bar['2011']++;  // ou $bar['2011'] = 'blah';
// resolve: array(2) { [2010]=> int(2) [2011]=> int(1) }
Author: Maniero, 2013-12-22

7 answers

Строго говоря, не есть объявления переменных в PHP. То есть, не существует в языке (statement var для объявления переменных. На практике переменные инициализируются при первом использовании. Во-вторых руководство:

Не требуется переменные инициализируются [sic; это было бы запустите компьютер переменных] в PHP, но это отличная практика. Переменные не инициализируются [sic; имеют] значение по умолчанию типа этого в зависимости от контекста, в котором они используются [sic; они используются] - [] по умолчанию логические FALSE, целые числа и точки-плавающие-это ноль, strings (e.g. используется в эхо) определяется как пустая строка и массивы становятся пустой массив.

Как видите, перевод руководство отстой

Таким образом:

$foo = 1; // inicializa a variável e atribui valor 1
$bar++;   // inicializa a variável, e por inferência de tipos ela é
          // inicializada como 0 antes de ser incrementada

, Как сказал и @илии, а также вручную, второй способ, это не считается хорошей практикой, хотя работает. В идеале оставить запусков ясно, стандартизированным способом (перед первым использованием, или, может быть, на вершине рамки), чтобы код, сделать его более ясным для тех, кто читает.

 41
Author: bfavaretto, 2014-01-07 10:32:50

, я Могу перечислить некоторые проблемы надежности, совместимости и дальнейшего обслуживания, которые будут возникать, когда мы работаем без объявлять переменные перед их использованием:

  1. Предупреждения в PHP совместимость, надежность, дальнейшего обслуживания

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

    // Reportar E_NOTICE pode ser muito bom (para reportar variáveis ​​
    // não inicializadas ou apanhar erros de digitação nos nomes das variáveis ​​...)
    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    

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

    Пример ошибки получен:

    Notice: Undefined variable: banana in /john/doe/meu_ficheiro.php on line 4
    
  2. Использование переменных с тем же имя надежность, дальнейшего обслуживания

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

    <?php
    
    // linha nº 25 do nosso ficheiro
    // valor da variável banana vem de base de dados por exemplo
    $banana = 100;
    
    for ($i = 1; $i <= $banana; $i++) {
      echo "O macaco comeu a banana nº ".$i;
    }
    
    
    // linha nº 1200 do nosso ficheiro
    // temos que trabalhar novamente bananas, então
    $macacos = recolheMacacos();
    
    while ($macacos <= $controloQualquer) {
        $banana++;
    }
    
    ?>
    

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

  3. Замена имени переменной надежность, дальнейшего обслуживания

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

    <?php
    
    // linha nº 25 do nosso ficheiro
    // recolha do stock das bananas
    $banana = novoStock('bananas');
    
    
    // linha nº 1200 do nosso ficheiro
    // adicionar ao stock mais bananas que chegaram
    $stock = incrementaStock($baanna);
    
    
    // apresenta novo stock ao utilizador
    echo "Stock atual: " . $sock;
    
    ?>
    

    Если переменная находится объявлена, мы знаем, что: или мы получаем объявленное значение или значение в результате выполненных операций. Если у нас включен предупреждения PHP в ходе разработки нашего приложения, будут предупреждены о том, что $baanna, $sock они не декларируются и быстро решили вопрос.


Быстрота выполнения (Performance)

, Здесь трудно достичь консенсуса, учитывая, что есть много переменных, которые способствуют этому. , Но если удается вспомнить какой-то пример практически, editarei ответ.

 19
Author: Zuul, 2013-12-22 14:53:19

Просто заявите-a.

Какого-Либо влияния на производительность не имеет значения, рядом влияние на техническое обслуживание.

. Вы или другой человек может получить в этом фрагменте кода, после этого и не уверен, что, если он прав, потому что не уверен, откуда приходит значение переменной (это в целом? был скопирован в другое место и забыли инициализировать? или писали так же с самого начала?).

Для Инициализации всех переменных-это очень несложно общаться намерение ваш код, чтобы другие, пожалуйста, сделайте это. Кроме того, быть более понятным, вы, вероятно, будете, избегая ошибок (своих и коллег), - например, кто-то может создать глобальную переменную с тем же именем и вмешательства в работу вашего кода.

 15
Author: elias, 2014-03-06 13:51:13

Сказывается на производительности

Как многие уже сказали, вряд ли влияние соответствующей производительности.

Там Будет выигрыш гораздо больше производительности, создавая лучшие алгоритмы, с помощью кэш - opcode и другие методы в этом направлении.

, Влияние на ремонтопригодность

Объявлять переменные и увеличивает читаемость кода, а, следовательно, простота себе или коллеге понять, что он был реализован впоследствии.

Влияние на качество

Качество внутренней и внешней системы, улучшает по нескольким причинам:

  • , Увеличивает понимание кода
  • Избежать ошибок скрытые использовать необъявленные переменные (всегда ли мы можем доверять, что операции с переменными undefined всегда будут, как мы надеемся?)
  • Помогает думать лучше в целях переменных, снижение заболеваемости переменные с именами, плохие и универсальные. Это концепция, субъективные, но хорошая практика облегчает слишком много.

Хорошими практиками, связанными

  • Объявите переменные с именами, понятными, избегая объяснений в комментариях. Много отзывов оставляют код загрязнены.

  • Избегайте повторного использования переменных "родовых" ($aux) в различных точках кода. Это почти то же самое, что не декларировать. Это очень усложняет понимание для тех, кто читает код, поскольку это необходимо прочитать весь код, чтобы понять, где "блок использования" начинается и где заканчивается.

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

 12
Author: utluiz, 2013-12-23 12:33:35

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

 5
Author: henrique, 2013-12-22 15:35:22

Опытных говорят, что это хорошо для объявления переменных множество причин. Лично у меня никогда не было проблем, а не объявлять переменные, за исключением случаев, из-за отсутствия внимания. В большинстве случаев ошибки выше (имя переменной, опечатки, использование переменной, которая не "обнуляется") подвержены не случилось, даже с объявления переменных.

Что Касается обслуживания, объявлять переменные только заставляет меня чувствовать, что рефакторинг кода. Если процесс помогает IDE, без проблема. В таких языках, как C и Java, уже совершали ошибки, объявления переменных, которые не произошли бы, если не было объявить их.

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

 3
Author: Calebe Oliveira, 2013-12-22 19:55:18

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

В PHP, я бы взял осторожно в случае объявления переменной, только, чтобы программист следить, что код делает.

Случай, который я думаю, что это необходимо "заявить" переменная в PHP было бы, например, использовать переменную по ссылке, если вы используете Данные, чтобы не оставить программист (который не знает свой код) запутался

Примере, который я считаю запутанным:

DB::transaction(function () use(&$usuario) {
    $usuario = new Usuario(array('nome' => 'wallace');
});

print_r($usuario); // Usuario (object) {}

Примере, который я считаю читаемым

$usuario; // Ou NULL

DB::transaction(function () use(&$usuario) {
    $usuario = new Usuario(array('nome' => 'wallace');
});

print_r($usuario); // Usuario (object) {}

Другой вопрос, что на PHP, как правило, это действительно необходимо объявить переменную, когда дело доходит до глобальной переменной.

Таким образом:

function counter()
{
    global $counter; // Declarei
    $conter = 0;
}
 2
Author: Wallace Maxters, 2015-10-24 21:40:19