G_manX![]() | Переменная и namespace1679703242 Для того чтобы вызвать функцию из "namespace" в другом "namespace"
используется use function, для константы use const, а как вывести переменную?
То есть, как вызвать переменную $other_var из файла "egg.php",
из namespace user\original в другом файлике, где namespace xopa
и уже есть переменная с таким же именем $other_var
Должно получится две переменные с одинаковыми именами из разных namespace и разными значениями.
Код файла egg.php:
Файл, где используется код из "egg.php", из namespace "user\original"
|
long399![]() | 1679703802 Хотя любой корректный PHP-код может находиться внутри пространства имён, только классы (включая абстрактные и трейты), интерфейсы, функции и константы зависят от него.
Т.е. переменные в пространство имен не попадают.
https://www.php.net/manual/ru/language.namespaces.definition.php G_manX![]() ![]() |
liris![]() | Обновлен 1679704411 «То есть, как вызвать переменную $other_var из файла "egg.php",[»
Не нужно вызывать другие переменные из других файлов. Чем меньше вы хотите стрелять себе в ногу, тем лучше для вас же.
Есть рекомендация - один файл, один класс, раскладывается по папочкам и через пространства имен можно очень удобно всем этим делом управлять.
Соблюдаете правила инкапсуляции, используете приватные поля через публичные методы, согласуете все типы данных, согласно вашей диаграмме классов. И не делаете себе и людям голову глупыми вопросами. И всё у вас работает как часы.
Касательно переменных - чем меньше у них видимость, тем лучше для вас же. Вы оставляете меньше возможностей запутать себя и других (кто будет разбираться в вашем коде). Чем меньше кода вне функции/класса - тем лучше. Чем короче код в функции/методе - тем лучше. G_manX![]() ![]() |
sash![]() | 1679704568 А ещё лучше даже не начинать. Нет таланта нефиг лезть влепить жирный лайк![]() |
skkx![]() | 1679704930 Я думаю если G_manX откроет храм господний, он обязательно в подавле храма сделает ночной клуб, со всеми пошлостями) влепить жирный лайк![]() |
G_manX![]() | 1679705149 liris,
Я понял, что так нельзя делать.
Но чисто теоретически, это возможно сделать?
То есть, вызвать переменную из другого namespace?
А если в библиотеке/фреймворке будет переменная с именем, которая есть у меня?
long399,
Т.е. переменные в пространство имен не попадают.
Это значит, что я не смогу реализовать свою задумку?
А если в библиотеке/фреймворке будет переменная с именем, которая есть у меня?
skkx,
Так php позволит ли мне реализовать мою задумку?
То есть, вызывать переменную из другого namespace в другом namespace?
Или это невозможно? влепить жирный лайк![]() |
long399![]() | 1679705299 «Это значит, что я не смогу реализовать свою задумку?
А если в библиотеке/фреймворке будет переменная с именем, которая есть у меня?»
Обычно, во фреймворках реализуется MVC подход, который подразумевает использование ООП. Т.е. переменные в файлах не лежат. Там лежат классы. Причем, как уже писали выше:
«Есть рекомендация - один файл, один класс, раскладывается по папочкам и через пространства имен можно очень удобно всем этим делом управлять.» G_manX![]() ![]() |
long399![]() | 1679706177 G_manX, я такого не встречал. Обычно библиотека содержит набор классов, в них могут быть перечислены константы и поля, к которым уже можно обратиться используя пространства имен.
Сама по себе переменная в библиотеке, не ассоциированная ни с одним классом, это странно, на мой взгляд. G_manX![]() ![]() |
G_manX![]() | 1679705453 long399, а как насчет библиотек? влепить жирный лайк![]() |
sad67man![]() | 1679706483 G_manX, На практике namespace используют только для классов. Потому что вместо функций вы можете написать класс со статическим. методом. Тоже самое и с переменными и константами - можно написать классы с константами и статическими свойствами
G_manX
![]() ![]() |
Fart83![]() | 1679706809 G_manX,
«Так php позволит ли мне реализовать мою задумку?
То есть, вызывать переменную из другого namespace в другом namespace?
Или это невозможно?»
возможно, если использовать require/include, то в порядке "живой" очереди переменные "зайдут".
но здесь 1 нюанс - это все из за семантики php с namespace, где namespace должен писать раньше.
поэтому, я полагаю, это только так выглядит.
G_manX
но, если все это "пропустить" через SPL, который в основном регистрирует все что связано с ооп, то такой трюк не пройдет.
SPL лоялен к define, но const NAME - не "проглотит".
ПС с SPL могу что то упустить, но общую суть передал![]() ![]() |