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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
iurii84
Сообщения: 6
Зарегистрирован: Вс мар 06, 2016 7:32 pm
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение iurii84 » Вс мар 20, 2016 7:57 pm

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

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

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

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

     $b = $a + $b;
} 

Sum();
echo $b;
?>

Заранее спасибо за помощь
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

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

Сообщение olehs » Пн мар 21, 2016 1:07 am

у меня Ваш пример выводит 3
iurii84
Сообщения: 6
Зарегистрирован: Вс мар 06, 2016 7:32 pm
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение iurii84 » Пн мар 21, 2016 1:47 am

Очень странно... не подскажите куда копать? Я не изменял никакие системные файлы...
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

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

Сообщение olehs » Пн мар 21, 2016 1:50 am

Нужно больше деталей. Куда Вы этот скрипт положили, как вызываете, есть ли какой-от еще код, выполняющийся до/после него?
iurii84
Сообщения: 6
Зарегистрирован: Вс мар 06, 2016 7:32 pm
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение iurii84 » Пн мар 21, 2016 2:03 am

Не работает никакой код подобного вида. То есть любая переменная будучи анонсированной global не читается в подпрограмме.
Вызываю в сценарии в чистом виде. Ни до ни после кода нет.
Сначала я думал, что по незнанию что-то не правильно делал в своих скриптах, но когда попробовал запустить вышеприведенный пример - то тоже ничего не вышло. Как я и говорил - он возвращает "2"
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

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

Сообщение olehs » Пн мар 21, 2016 2:35 am

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

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

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

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

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

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

Sum();
echo $GLOBALS["b"]; 
iurii84
Сообщения: 6
Зарегистрирован: Вс мар 06, 2016 7:32 pm
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение iurii84 » Пн мар 21, 2016 2:46 am

Благодарю. То что нужно))
Я пытался и с суперглобальной экспериментировать, но немного ошибся с синтаксисом)
А так все работает)
Ответить