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

Преимущество/недостаток глобальных переменных и функциональных параметров в PHP?

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

если наше использование этих двух ниже одинаково, что лучше?

function doSomething ($var1,$var2,..){
    ...
}

ИЛИ

function doSomething (){
    global $var1,$var2,..;
    ...
}

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

4b9b3361

Ответ 1

Использование памяти - ничтожное беспокойство. Гораздо важнее, чтобы код был легко следовать и не иметь... непредсказуемых... результатов. Добавление глобальных переменных - ОЧЕНЬ ПЛОХАЯ ИДЕЯ с этой точки зрения, ИМО.

Если вас беспокоит использование памяти, то нужно сделать

function doSomething (&$var1, &$var2,..) {
   ...
}

Это будет передавать переменные по ссылке, а не создавать новые копии в памяти. Если вы измените их во время выполнения функции, эти изменения будут отражены, когда выполнение вернется к вызывающему.

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

function doSomething ($var1, $var2) {
    ...
}

Ответ 2

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

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

  • Приращение глобальной переменной в 2 раза медленнее, чем локальная переменная.
  • Просто объявление глобальной переменной без использования ее в функции также замедляет работу (примерно на ту же сумму, что и приращение локального var). PHP, вероятно, проверяет, существует ли глобальная сеть.

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

Ответ 3

Запишите его, чтобы взять параметры. Поддержание работоспособности гораздо важнее, чем микро-оптимизация. Когда вы принимаете параметры, переменные не могут быть изменены в неожиданных местах.

Ответ 4

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

Как альтернатива, вы можете передать один параметр (или два, если он действительно идет с функцией, например, exp), а остальное в массиве параметров (немного как jquery). Таким образом, вы не используете глобальные переменные, имеете некоторую гибкость параметров и четко определили значения по умолчанию для каждого параметра.

function get_things($thing_name,$opt= array() {
   if(!isset($opt["order"])) $opt["order"]= 'ASC';
}

Ответ 5

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

http://php.net/manual/en/language.variables.scope.php

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

Ответ 6

В PHP 4 с использованием глобальных переменных с большими переменными существенно влияет на производительность.

Имея в $data строку 3Mb с данными двоичной карты и запуская тесты 10k, если бит равен 0 или 1 для разных глобальных использования, дает следующие результаты времени:

function getBit($pos) {
global $data;
$posByte = floor($pos/8); 
...
}

t5 бит открыт: 0.05495s, искать: 5.04544s, все: 5.10039s

function getBit($data) {
 global $_bin_point;
 $pos = $_bin_point; 
 $posByte = floor($pos/8); 
}

t5 бит открыт: 0.03947s, искать: 0.12345s, все: 0.16292s

function getBit($data, $pos) {
$posByte = floor($pos/8); 
...
}

t5 бит открыт: 0.05179s, искать: 0.08856s, все: 0.14035s

Итак, параметры передачи быстрее, чем использование глобальных переменных >= 3Mb. Не тестировали с передачей справочной информации $& и не тестировали с PHP5.