powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [php] Недоступность глобальной переменной
19 сообщений из 19, страница 1 из 1
[php] Недоступность глобальной переменной
    #38546162
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убил часа 4, поскольку впервые столкнулся с таким поведением (мож я чего забыл?!?):

PHP 5.3.7 есть пара скриптов:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
1.php:
  $s = array();

  function make() {
    global $s;
    $s = array('a','b','c');
    var_dump($s);
  }

2.php:
  require_once '1.php1';
  var_dump($s);                // как и ожидадлсь получаем пустой массив.

  make();                           // как и ожидалось функция выводит 3 элемента.

  var_dump($s);                 // получаем NULL и Notice undefined variable s.



Но, достаточно объявить эту $s глобальной на уровне любого из файлов - всё работает... до следующего require.

Это фича, которую я забыл или бага?
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546215
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109PHP 5.3.7Мож, обновиться пора?

По теме: что-то тут не так, последний var_dump печатает массив, как и следует. Только версия php актуальная.
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546222
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,

вложил оба файла в одном флаконе. Там отметил места, где делается var_dump() и с каким результатом.

Кроме этого, переменная $shipsView -- также недоступна в вызывающем файле layout.phtml, который подключается для вывода из index.php. Второй файл, getField.php вызывается также из index.php... нифига непонятно.

Это так, поразвлекаться решил, сделать примерчик в трех вариантах: ООП, на функциях и глобалах... посмотреть что красявее.
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546232
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторfunction setShipGroups( array $groups = null )
порадовало.

авторreturn $ships;
не оно?
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546244
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow
, глупо радоваться потрохам сырого, наскоро правленного неотлаженного файла.
Да и помощь требуется по другому вопросу. Хотя, если "больше нечему" - радуйтесь, лишь бы ответ нашелся... :)

Конструкция - не запрещена языком: читать как "если не задано, то отсутствует".

По делу:
Нет, не оно. Этот возвращаемый результат - вообще не используется.

Ещё если определить $ship = array('a','v'); ДО оператора включенияво втором файле, то последний по исполнению var_dump() - отдает это присваивание.

Насколько понимаю, такие вложения - типовое использование... что "помешало" тут?
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546245
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

то ли у меня глаз замылился, то ли косяк "не туту" (есть же ещё "над" файлы и тот же index.php и диспетчер...).
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546252
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

вот результат вывода:

AFTER DECLARE:

array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}


AFTER INCLUDE:

array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}

array(10) {
[0]=>
array(7) {
["size"]=>
int(4)
["x"]=>
int(7)
["y"]=>
int(3)
["v"]=>
string(1) "g"
["img"]=>
string(25) "/public/images/ship4g.jpg"
["visible"]=>
NULL
["holes"]=>
array(0) {
}
}
[1]=>
array(7) {
["size"]=>
int(3)
["x"]=>
int(11)
["y"]=>
int(5)
["v"]=>
string(1) "g"
["img"]=>
string(25) "/public/images/ship3g.jpg"
["visible"]=>
NULL
["holes"]=>
array(0) {
}
}
[2]=>
array(7) {
["size"]=>
int(3)
["x"]=>
int(8)
["y"]=>
int(10)
["v"]=>
string(1) "g"
["img"]=>
string(25) "/public/images/ship3g.jpg"
["visible"]=>
NULL
["holes"]=>
array(0) {
}
}
[3]=>
array(7) {
["size"]=>
int(2)
["x"]=>
int(2)
["y"]=>
int(10)
["v"]=>
string(1) "v"
["img"]=>
string(25) "/public/images/ship2v.jpg"
["visible"]=>
NULL
["holes"]=>
array(0) {
}
}
[4]=>
array(7) {
["size"]=>
int(2)
["x"]=>
int(7)
["y"]=>
int(5)
["v"]=>
string(1) "v"
["img"]=>
string(25) "/public/images/ship2v.jpg"
["visible"]=>
NULL
["holes"]=>
array(0) {
}
}
[5]=>
array(7) {
["size"]=>
int(2)
["x"]=>
int(9)
["y"]=>
int(7)
["v"]=>
string(1) "g"
["img"]=>
string(25) "/public/images/ship2g.jpg"
["visible"]=>
NULL
["holes"]=>
array(0) {
}
}
[6]=>
array(7) {
["size"]=>
int(1)
["x"]=>
int(11)
["y"]=>
int(10)
["v"]=>
string(1) "g"
["img"]=>
string(25) "/public/images/ship1g.jpg"
["visible"]=>
NULL
["holes"]=>
array(0) {
}
}
[7]=>
array(7) {
["size"]=>
int(1)
["x"]=>
int(13)
["y"]=>
int(10)
["v"]=>
string(1) "g"
["img"]=>
string(25) "/public/images/ship1g.jpg"
["visible"]=>
NULL
["holes"]=>
array(0) {
}
}
[8]=>
array(7) {
["size"]=>
int(1)
["x"]=>
int(4)
["y"]=>
int(10)
["v"]=>
string(1) "g"
["img"]=>
string(25) "/public/images/ship1g.jpg"
["visible"]=>
NULL
["holes"]=>
array(0) {
}
}
[9]=>
array(7) {
["size"]=>
int(1)
["x"]=>
int(9)
["y"]=>
int(11)
["v"]=>
string(1) "v"
["img"]=>
string(25) "/public/images/ship1v.jpg"
["visible"]=>
NULL
["holes"]=>
array(0) {
}
}
}

AFTER CALL:

array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}


Кстати, можно заметить что свойство кораблика 'visible' - "внезапно" также не передано внутрь функции setShip()...

Есть идеи? Или так никто и не подскажет чего я забыл...
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546253
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Упс. Сделал phpinfo()? версия: PHP Version 5.3.3-7+squeeze17
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546257
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

нашел, вопрос закрыт, всем спасибо. :)

Что получилось:

1. index.php -- как главный файл сайта готовит урл и вызывает функцию(!) диспетчера из его файла.

2. диспетчер как "умный Ваня" - разруливает урл и подключает внутри себя чего попросили и выполняет.

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

3. код этой версии - работает через глобалы, в реальности ... определенные локально внутри функции диспетчера. :)

... забыл что у меня диспетчер - функция, способная рекурсивно вызываться для "до диспетчерирования урла" если это надо подпроекту... :)
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546324
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Если Вы будете продолжать писать в том же стиле, то у Вас ещё не раз возникнет данная проблема. При правильной структуре функция должна получать эту переменную как параметр... или же ссылку на эту переменную, если её надо изменить внутри функции. Но вот по всему проекту плодить внутри функций глобальные переменные - это очень не круто. Зачем вообще нужны тогда функции и классы, внутрь которых надо лазить, что бы узнать меняют ли они что-то или нет.

P.S. Сколько уже работаю в web, повидал кода десятков разработчиков... Ещё ни разу не видел на практике потребности использования global переменных. По неопытности первое время даже _GET и _POST массивы в методах юзал, но уже давно от этого ушёл, так как это тоже вызывало некоторые проблемы, и если вдруг я менял что-то наспех и забывал передокументировать, то получалась полная лажа... матерился в унисон со всеми, кто читал мой код . Этого не происходит, если явно видно, что изменились аргументы функции... и их очень легко отследить и всё быстро передокументировать
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546342
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

Пасибки. Я ставил перед собой цель реализовать один и тот же код (строго по функционалу) ... тремя разными способами. Это просто третий способ. Первоначально я из него ваще все параметры у функций поотбирал... тока глобалы и ничего больше. :)

Если бы вы посмотрели на код внимательнее, то заметили что это практически downshift класса и его методов.
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546344
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Кстати, для ScareCrow: такая конструкция параметров описана в мануале для популярной функции ob_start() - см. самый первый параметр. :)
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546677
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Кстати2: из всех трех методов, самый компактный и быстрый оказался как раз на глобалах 5-7мсек на ответ. Самый большой по коду - ООП, но он же самый красявый. А вот самым долгим (10-12мсек) оказалось делать всё на функциях с передачей параметров "туда-сюда".

Всё, вопрос закрыт.
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546714
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109самым долгим (10-12мсек) оказалось делать всё на функциях с передачей параметров "туда-сюда".Уточните пожалуйста, передача параметров по ссылке или по значению?

PS: При передаче по значению вроде как тратится дополнительное время на копирование значения во внутреннюю переменную функции, чего не происходит при передаче по ссылке.
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546762
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,

смешанно. Код - это игрушка типа морского боя... написано целиком в трех подходах (там делов-то) и профилирована.

дополнительно:
1. код на глобала - глобально хранятся только общие данные в массивах. Иначе - совсем полный маразм в качестве текста. Параметры функций частично восстановлены (тут есть пример)

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

3. ООП классом (по 2 шт модель и конструктор). Красяво - очень. Но времени занало в 2 раза больше, потому что потребовало глубокой оптимизации кода... ой, это теперь не надо ... и это ... и тут ... фактически из него есть 2 вывода:

3.1. ООП - без качественной оптимизации по Касьянову -- унылое Г.

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

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

Это было ТЗ как тестовое подхожу ли в контору. Спросил про оптимизации ООП кода у собеседователя и решил, что контора мне не подходит, а из ТЗ - сделал "контрольный выстрел". :)
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546768
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополню. В Сети много холиваров "как лучше"... но сравнения часто некорректны в силу разных задач (теплое с мягким), поэтому и сделал ровно один функционал. Времени заняло с вечера пятницы с 21-00 до 03-00 понедельника. Всё равно у нас морозы под 30...

Да, ещё: код на глобалах - самый шустрый, но и самый сложный с точки зрения "расширений" - но это и так думаю понятно.
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546770
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

осталось посмотреть как рыбенку с телефона играть на моем локалхвосте... :)
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38546835
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторPS: При передаче по значению вроде как тратится дополнительное время на копирование значения во внутреннюю переменную функции, чего не происходит при передаче по ссылке.
нет. копируется только при записи в них. copy-on-write однако.
...
Рейтинг: 0 / 0
[php] Недоступность глобальной переменной
    #38547052
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowcopy-on-writeТочно, запамятовал...
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [php] Недоступность глобальной переменной
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]