Страница 1 из 1

Пользовательские функции в PHP

Добавлено: Вс мар 20, 2016 7:57 pm
iurii84
Доброе время суток.
второй день уже бьюсь над одной проблемой - помогите пожалуйста разобраться.
Задача - в подпрограмме реализованной через function myFunction() не могу работать с глобальными переменными.
То есть, даже такой классический пример выводит "2"

Код: Выделить всё

<?php
$a = 1;
$b = 2;

function Sum()
{
     global $a, $b;

     $b = $a + $b;
} 

Sum();
echo $b;
?>

Заранее спасибо за помощь

Re: Пользовательские функции в PHP

Добавлено: Пн мар 21, 2016 1:07 am
olehs
у меня Ваш пример выводит 3

Re: Пользовательские функции в PHP

Добавлено: Пн мар 21, 2016 1:47 am
iurii84
Очень странно... не подскажите куда копать? Я не изменял никакие системные файлы...

Re: Пользовательские функции в PHP

Добавлено: Пн мар 21, 2016 1:50 am
olehs
Нужно больше деталей. Куда Вы этот скрипт положили, как вызываете, есть ли какой-от еще код, выполняющийся до/после него?

Re: Пользовательские функции в PHP

Добавлено: Пн мар 21, 2016 2:03 am
iurii84
Не работает никакой код подобного вида. То есть любая переменная будучи анонсированной global не читается в подпрограмме.
Вызываю в сценарии в чистом виде. Ни до ни после кода нет.
Сначала я думал, что по незнанию что-то не правильно делал в своих скриптах, но когда попробовал запустить вышеприведенный пример - то тоже ничего не вышло. Как я и говорил - он возвращает "2"

Re: Пользовательские функции в PHP

Добавлено: Пн мар 21, 2016 2:35 am
olehs
А, простите, я думал речь идет о PHP-скриптах и тестировал код в отдельном файле PHP. А Вы говорили о скриптах МЖД.
Дело в том, что МЖД-скрипты выполняются в теле метода runScript с помощью eval(), т.е. в области видимости этого метода, а не в глобальной области.
Из этого следует, что в МЖД-скрипте нельзя объявить глобальную переменную.

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

UPD. Совсем забыл про суперглобальную переменную $GLOBALS. Вот так Ваш пример заработает

Код: Выделить всё

$GLOBALS["a"] = 1;
$GLOBALS["b"] = 2;

function Sum()
{
     $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
} 

Sum();
echo $GLOBALS["b"]; 

Re: Пользовательские функции в PHP

Добавлено: Пн мар 21, 2016 2:46 am
iurii84
Благодарю. То что нужно))
Я пытался и с суперглобальной экспериментировать, но немного ошибся с синтаксисом)
А так все работает)