Могут ли глобальные файлы мешать требуемым файлам в PHP? - PullRequest
3 голосов
/ 07 июля 2011

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

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

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

Ответы [ 4 ]

3 голосов
/ 07 июля 2011

Если вы определите свою глобальную переменную в функции, вы будете ссылаться на глобальную переменную, и изменения этой переменной, сделанные в вашей функции, будут видны другим функциям, которые используют эту глобальную переменную, независимо от того, в каких файлах они находятся.До тех пор, пока порядок включения / выполнения корректен.

1 голос
/ 07 июля 2011

Глобалы распределяются между всеми файлами.Кстати, вместо того, чтобы объявлять их global $variable;, вы должны использовать $GLOBALS['variable'], чтобы явно указать, что вы обращаетесь к глобальной переменной.

1 голос
/ 07 июля 2011

Если файл, который вы объявляете глобальным, находится в памяти, тогда эта переменная доступна для использования. Но если вы не include или require файл, в котором объявлено глобальное на определенной странице, он не будет доступен для вас.

Заказ также важен. Если вы попытаетесь вызвать глобальную переменную до include или require файла, в котором вы ее установили, она будет недоступна.

0 голосов
/ 07 июля 2011

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

Или вы можете превратить массив в класс и использовать методы вызова функций.

Возможно, синглтон или реестр (2) может помочь.

Обратите внимание, что большинство реализаций ООП передают ссылку на объект в качестве первого параметра метода, скрытого (C ++, PHP) или нет (C, Python).

...