2009-07-23 7 views
2

Является ли хорошей практикой инициализировать глобальную переменную в PHP? Фрагмент кода, похоже, работает нормально, но лучше ли инициализировать (в более крупном проекте, скажем, ради производительности) переменную за пределами функции, например, во второй царапине кода?Инициализировать глобальные переменные в PHP

if(isset($_POST["Return"]))Validate(); 
function Validate(){ 
    (!empty($_POST["From"])&&!empty($_POST["Body"]))?Send_Email():Fuss(); 
}; 
function Send_Email(){ 
    global $Alert; 
    $Alert="Lorem Ipsum"; 
    mail("","",$_POST["Body"],"From:".$_POST["From"]); 
}; 
function Fuss(){ 
    global $Alert; 
    $Alert="Dolor Sit" 
}; 

function Alert(){ 
    global $Alert; 
    if(!is_null($Alert))echo $Alert; 
}; 

Обратите внимание, что переменная $ Alert above не инициализирована.

$Alert; 
if(isset($_POST["Return"]))Validate(); 
function Validate(){ 
    (!empty($_POST["From"])&&!empty($_POST["Body"]))?Send_Email():Fuss(); 
}; 
function Send_Email(){ 
    global $Alert; 
    $Alert="Lorem Ipsum"; 
    mail("","",$_POST["Body"],"From:".$_POST["From"]); 
}; 
function Fuss(){ 
    global $Alert; 
    $Alert="Dolor Sit" 
}; 

function Alert(){ 
    global $Alert; 
    if(!is_null($Alert))echo $Alert; 
}; 

Теперь заметьте.

Я ценю любые ответы! Спасибо заранее, Jay

ответ

-1

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

+0

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

1

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

+0

Во-первых, благодаря быстрому ответу каждого! Я не получаю уведомление независимо от того, существует ли $ Alert.Итак, переменная инициализируется, когда PHP видит, что это первый экземпляр, глобальный или другой (в первом фрагменте, то есть: строка 6)? – Jay

+0

Возможно, вы не видите эти уведомления, потому что вы их не включили, вы можете либо изменить свой php.ini, чтобы включить их, либо использовать эту команду: error_reporting (E_ALL); Значение по умолчанию для error_reporting имеет тенденцию меняться в зависимости от версии PHP (я думаю!). Но лучше всего настроить его на E_ALL, так как вы будете более осведомлены о своих ошибках программирования. – Vex

+0

Как я уже сказал, я добавил короткий фрагмент кода ниже того, что у нас уже есть, даже поэтому я до сих пор не вижу ошибок! error_reporting (E_ALL); ini_set ("display_errors", 1); – Jay

2

Хорошо ли инициализировать глобальную переменную в PHP?

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

Вы можете найти пару аргументов here.

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

+0

Мне нужно, чтобы он был глобальным, поскольку Alert() вызывается каждый раз, когда загружается страница, и если $ Alert имеет значение null, на странице не будет отображаться предупреждение. – Jay

3

Во втором примере вы еще не объявить переменную, линия

$alert; 

не назначать $alert значение, так что остается необъявленной.

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

$alert = ''; 

if ($alert) { 
    //do something with alert 
} 
1

Не использовать глобальные переменные, являются плохим parctice и не будут доступны в PHP6. Если вам нужны значения, доступные по страницам/классам, почему бы вам не создать класс перечисления? Смотрите пример здесь: http://riccardotacconi.blogspot.com/2009/05/enumerator-class-in-php.html

Basicaly вы включаете свой класс, и вы получите значение таким образом: QYourClass :: Предупреждение

+1

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

0

В соответствии с this page глобальные переменные не отменяются в PHP6, а регистрируют глобальные переменные. Глобальные переменные имеют ряд применений (некоторые из них являются хорошей практикой, некоторые - нет) и в основном безопасны. Register globals являются серьезной защитной лазейкой и по праву устарели.

Смежные вопросы