|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
У кого небудь було подобное ? Сначало я подумал что есть разница между require и include, но самое главное, что в другом месте код с global работает отлично. Я начинаю сходить с ума. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 11:04 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей159в другом месте код с global работает отличноЧем это место отличается от другого? А вообще, больше похоже на глюк какой-то. Проверьте на всякий случай, действительно ли перед вызовом функции переменные определены. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 12:13 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
содержимое этого файла запускается из одной функции. при ее выполнении загружается нужный require_once и запускается снова новая функция уже загруженного только что require. В нем есть содержимое что описано выше. И переменная не видится как глобальная никак. Но если взять любые переменные перед этим, то через глобал они видятся. Не видятся все переменные которые находятся внутри функции1, функции2, в самом файле который подгружен. В общем идея моя была проста - подключать файлы только по необходимости, но как я вижу это не работает. В мануалах не нахожу ничего подобного. Или просто баг, или никто так не делал. Но в мануале никаких предостережений. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 12:17 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
попробую переписать как класс с динамическим подключением по событии вызова. Посмотрю как поведет себя. Подключать все подряд без надобности тоже не выход. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 12:19 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
пробовал искать различия между include и require потом думал может что-то с памятью. Движок DLE. Переменная $member_id без всяких проблем в глобал видит. Все новое что не напишу никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 12:26 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей159загружается нужный require_onceтолько при условии, что данный файл не был подключен ранее. Андрей159и запускается снова новая функция уже загруженного только что require.Нифига не понятно, но, надеюсь, речь идет о разных файлах. Андрей159Не видятся все переменные которые находятся внутри функции1, функции2, в самом файле который подгружен.Не понял, кто на ком лежал... Вы хотите передать переменные из вызывающего скрипта внутрь функции или Вы хотите передать локальные переменные функции в вызывающий скрипт? Андрей159В общем идея моя была проста - подключать файлы только по необходимости, но как я вижу это не работает.Видимо, не работает в конкретном Вашем случае. Гадание тут вряд ли поможет, так что, займитесь отладкой. Есть подозрение, что вывод ошибок отключен, потому Вы чего-то не видите. Андрей159пробовал искать различия между include и requireРазличия только в продолжении или прекращении работы скрипта при неудачном подключении файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 12:32 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей159 Код: php 1.
ну это бред. вы - рукожоп. Модератор: полудух , выбирайте выражения! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 13:02 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
"полудух", спасибо что пришел to vkle, вот схема ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 13:06 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
1. Загружается ядро DLE 2. Все легкие функции лежат в function.php 3. При (например) сохранении профиля или страницы возле запроса mysql UPDATE дальше вызывается save_to_events(параметры) 4. save_to_events находится в function.php и подгружает через require_one('events.php') и выполняет также функцию save_event(...) которая в events.php. Вначале выполняется код загружен в require_one('events.php'), потом разумеется выполняется функция save_event. 5. В функции save_event в конце просто подключаю require_one('task_condition.php'). никаких вызов функций отсюда. 6. Функция находится внутри task_condition.php и запускается там же из этого файла. И там видимость через global к $member_id есть а к моим любим переменным нет. Вот и вся история ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 13:17 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
переменная лежит прямо возле функции просто за ее пределами. и не видится. тоесть я думал о global в каждой предыдущей функции, но здесь это не уместно. Должно было так работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 13:22 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
вывод ошибок не отключен. не ругается просто так ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 13:27 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей1592. Все легкие функции лежат в function.php 3. При (например) сохранении профиля или страницы возле запроса mysql UPDATE дальше вызывается save_to_events(параметры) 4. save_to_events находится в function.php и подгружает через require_one('events.php') и выполняет также функцию save_event(...) которая в events.php. Вначале выполняется код загружен в require_one('events.php'), потом разумеется выполняется функция save_event. 5. В функции save_event в конце просто подключаю require_one('task_condition.php'). никаких вызов функций отсюда. 6. Функция находится внутри task_condition.php и запускается там же из этого файла. И там видимость через global к $member_id есть а к моим любим переменным нет. В общих чертах понятно. Вероятно, есть смысл сделать несложный тестовый пример, показывающий проблему, который можно быстренько скопипастить и запустить. Насколько понимаю из описания, цепочка вызовов/инклюдов как ниже нарисовал. Если ошибся где-то, приведите свой вариант. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: php 1. 2. 3. 4. 5. 6.
Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 13:50 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Из вашего примера все вроде бы верно, вот только "любимая переменная" как не удивительно будет работать даже несмотря на то, что отсутствует global внутри первой функции function save_to_events() {. то-есть в самом PHP который подключает внутри функции через require сам код php видит переменные. Немножко странно, но мне не мешает. Вот как вы представили пример, не будет работать в последнем task_condition.php скрипт PHP работает, все видит прекрасно. Перед функцией в task_condition.php я пишу $МояНоваяПеременная = 1; Парадокс вот в чем: Код: php 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 14:06 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Давайте на вашем примере покажу: [quot vkle]Андрей159 Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: php 1. 2. 3. 4. 5. 6.
Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 14:09 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Я вернусь к этому вопросу. Возможно найду причину. Если найду, напишу. Вопрос сложный оказался. 4 часа на него потратил. Сейчас выход какой-то другой найду. Это не проблема. Но все же очень интересно. Загадка. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 14:11 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Модератор, ты меня конечно прости, но если выбирать выражения, когда чел - рукожоп, то он ничему не научится. Я просто называю вещи своими именами. когда вот так вызываешь ячейку массива, то ты - рукожоп: Код: php 1.
надо вот так: Код: php 1.
когда лезешь в массив через константы, то опять же - рукожоп ты: Код: php 1.
ну а с чего бы ему возвращать то?? Он же красным по белому подсказывает: "Use of undefined constant aaa - assumed 'aaa' in ..." и если вот так отдавать переменную в ф-ю, то туда придёт boolean (на всякий случай, а то вдруг там ждут какое-то значение): Код: php 1. 2.
студент с выключенными ошибками наговнокодил непойми что и ждёт манны небесной рисует картинки собрал пол-форума а самое страшное, что никто на сами ошибки ему тут не указывает Модератор: Когда Вы пишите "так неправильно, надо так" - вопросов нет - указали на ошибки. Но когда Вы вешаете ярлыки без каких-либо внятных комментариев - это, извините, кроме как хамством назвать сложно. К ошибочности терминологии пользователя Андрей159 у меня тоже немало претензий. В частности там, где echo ... // ничего не возвращает. Согласно документации, echo действительно ничего не возвращает, и это абсолютно нормально. Тем более, что и возвращать то некуда. Но автор, возможно, документацию читает по диагонали и имел в виду, вероятно, что-то другое. Скорее всего, правильно читать "ничего не выводит" или "не печатает". полудуха самое страшное, что никто на сами ошибки ему тут не указывает Увы, Вы в этом топике тоже включились совсем не с указания на ошибки. -- vkle ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 14:15 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Ясно-понятно. При таком раскладе $mynewvar становится локальной переменной функции save_event(), а не глобальной переменной скрипта. По идее, так должно работать: Код: php 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 14:20 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
to "полудух", Уважаемый, вы застряли на старых версиях. В новой версии можно и не такое делать. Я не успеваю 7,2 полностю освоить, а вы мне вспоминаете о грехах PHP 5.3. А вы знаете что в 5,3 это будет вообще синтаксической ошибкой? В 5,6 это работает. в скобках "двойной_масив[1][2]" не проскочит, если не добавить ['2'], но в {} пройдет. Нужно каждый год учить что-то если не хотите живот отрастить как в папика. Стремитесь, учитесь, язык английский к примеру, в качалку сходите. Работы много, не успеете менять. Зарплаты какие. Конечно каждого нудика туда не берут. API Google, Facebook, VK, OK, Instagram освоите - это только один из 10 нужных пунктиков. Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 14:52 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
"полудух" Извени, не обижайся. В новых версиях можно так писать. Это уже не ошибка, а наверное норма. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 15:09 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Заработало, когда в предыдущей функции также указал тот же global. На уровне корневой логики PHP не все понятно, но уже хоть знаю как если что бороться с этим. Спасибо за помощь. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: php 1. 2. 3. 4. 5. 6. 7.
Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 15:43 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
видимо когда функция в функции, то нужно в начале родительской функции обязательно указывать global . require просто расширяет функцию в дочерной тоже указываем global и только тогда переменная видится. Не видел мануалы именно с такой ситуацией и объяснениями. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 15:50 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
что характерно, что если в подключаемом php написать global, то не работает. А это значит, что функция вовсе не расширяется (это я себе придумал). Нужно именно в предыдущей функции прописать в global. Так работает. Не пойму до конца почему. Ну да ладно. Буду помнить. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 15:54 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей159 На уровне корневой логики PHP не все понятно Не надо искать сложности там, где их нет. Как раз, на этом уровне всё предельно просто. Возьмите непосредственно код включаемого файла и поместите его вместо строчки include. Где оказалась Ваша переменная? ;-) Остальное написано в разделе руководства про область видимости переменных. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 16:01 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Андрей159to "полудух", Уважаемый, вы застряли на старых версиях. В новой версии можно и не такое делать. Я не успеваю 7,2 полностю освоить, а вы мне вспоминаете о грехах PHP 5.3. А вы знаете что в 5,3 это будет вообще синтаксической ошибкой? В 5,6 это работает. в скобках "двойной_масив[1][2]" не проскочит, если не добавить ['2'], но в {} пройдет. Нужно каждый год учить что-то если не хотите живот отрастить как в папика. Стремитесь, учитесь, язык английский к примеру, в качалку сходите. Работы много, не успеете менять. Зарплаты какие. Конечно каждого нудика туда не берут. API Google, Facebook, VK, OK, Instagram освоите - это только один из 10 нужных пунктиков. Удачи. омг это дно ещё и индекс массива с ключами путает сынок, я каждую неделю узнаю больше, чем ты за год. Код: sql 1. 2.
автор# ./t.php PHP Warning: Use of undefined constant key1 - assumed 'key1' (this will throw an Error in a future version of PHP) in t.php on line 6 PHP Warning: Use of undefined constant key2 - assumed 'key2' (this will throw an Error in a future version of PHP) in t.php on line 6 # php -v PHP 7.2.8-1+0~20180725124257.2+stretch~1.gbp571e56 (cli) (built: Jul 25 2018 12:43:00) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.8-1+0~20180725124257.2+stretch~1.gbp571e56, Copyright (c) 1999-2018, by Zend Technologies у тебя язык впереди головы, овощ. и ещё раз 20 внимательно посмотри, как именно там у тебя ячейка вызывается, и как у меня. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 16:03 |
|
Видимость внутри функции переменных
|
|||
---|---|---|---|
#18+
Спасибо. Все сложилось. Когда функция в функции, то нужно дважды объявить. Во внешней функции и во внутренней. Иначе никак. Если переменная была передана первой функции как параметр, то можно даже после require_one в самом PHP написать первый global, а второй тот же global внутри вложенной функции и заработает. Если придуманная переменная используется внутри родительской функции, тогда прямо в родительской функции до require_one нужно объявить global и в require_one >> функции также объявить - будет работать. Как-то так :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2018, 16:06 |
|
|
start [/forum/topic.php?fid=23&msg=39699644&tid=1460173]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 333ms |
total: | 454ms |
0 / 0 |