Объявление и использование глобальных переменных ведет себя не так в основном php, как в codeigniter - PullRequest
0 голосов
/ 03 июня 2019

В Core php для глобальной области действия Пример-1 работает нормально и печатает B=15 из-за добавления b=a+b

, но в codeigniter печатает B=10что является $b начальным значением , это означает, что глобальная область видимости не работает так же, как базовый php в codeigniter.

Пример-1 работает нормально в основном php, но не работает в codeigniter

$a = 5;
$b = 10;

function myTest() {
    global $a, $b;
    $b = $a + $b;
}

myTest();
echo "B=$b"; //prints "B=15" in core php and "B=10" in Codeigniter

Пример-2 работает нормально в основном php и в codeigniter Оба

global $a,$b;
$a = 5;
$b = 10;

function myTest() {
    global $a, $b;
    $b = $a + $b;
}

myTest();
echo "B=$b";//prints "B=15" in core php and in Codeigniter both.

я использовал это Example-2 в моем представлении codeigniter.

Я знаю, что Example-2 не правильно синтаксически, но Example-1 правильно синтаксически, но тогда мой вопрос:

почему он не работает в codeigniter и почему Example-2 , который имеет два разаинициализация global работает в коде

1 Ответ

3 голосов
/ 03 июня 2019

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

Например # 1:

Если вы используете global $a; в своей функции (что технически будет определено внутри метода), она будет использовать $a из глобальной области, в то время как вы определили $a в области представлений (которая является область применения метода view-class).

Например # 2:

Когда вы используете global $a; перед определением переменной, вы будете использовать $a -вариант из глобальной области видимости в обоих случаях, поэтому это работает

Ссылки:

Подробнее о переменных областях вы можете прочитать в руководстве

Примечания:

  1. Это не является чем-то конкретным для CodeIgniter. Это просто, как работают области в PHP.
  2. Использование global считается анти-паттерном, и его следует избегать, когда это возможно (что вы можете в большинстве ситуаций), поскольку это может сделать отладку реальной болью и легко вызвать нежелательные побочные эффекты.
  3. Я бы порекомендовал вам не помещать функции в представления. Добавьте их в качестве вспомогательных функций, которые вы можете загрузить, прежде чем загружать свои представления. Это облегчит поиск ваших функций (поскольку они все находятся в одном месте) и может быть легко использовано повторно.
...