
dypa
18.04.2019
09:13:40
а как конструктор использовать? ?
свойства и сеттеры никуда не делись, да и область видимости при require остается той же - так что даже в конструктор прокинуть значение выйдет

Dmitry
18.04.2019
09:14:21
криво

Pavel
18.04.2019
09:15:51
Да, в пхп впринципе можно многое сделать из нормальных языков, только криво ?

dypa
18.04.2019
09:16:48
IDE много чего не поддерживают или поддерживают через костыли phpdoc
анонимные классы умеют в интерфейсы

Google

dypa
18.04.2019
09:18:18
конечно криво, я о том же. главное что это можно сделать

Dmitry
18.04.2019
09:19:43
а что, никаких rfc на область видимости классов в неймспейсах еще не создали? ?

dypa
18.04.2019
09:19:58
я тебе показал poc для "модуля" в пхп, не более.
победила другая парадигма
ZF официально похоронили ;)

Дон
18.04.2019
09:31:17
кому нужна модульность в php?

Andrew P.
18.04.2019
09:39:14

Pavel
18.04.2019
09:51:00

Kirill
18.04.2019
09:53:57
Модуль это вообще слишком абстрактное понятие. Что конкретно подразумеваете под модулем?

Pavel
18.04.2019
09:56:39
Ну на самом деле все примерно об одном и том же думают - возможность обозвать некий набор функций/классов/констант одним идентификатором - именем модуля, и потом оттуда эти функции и классы импортировать по одному либо сразу кучей.
Но с концепцией неймспейсов и приватных классов пересекается, и она возможно более мощная.
Ну, это крайне корявое определение, если вдуматься :)
В пшп тоже есть набор кода и он может использоваться в другом коде

Google

dypa
18.04.2019
10:30:08
> A namespace is a set of some code, like variables, functions and procedures, which can be used in other code.
> A file is a set of some code, like variables, functions and procedures, which can be used in other code.
> A git repository is a set of some code, like variables, functions and procedures, which can be used in other code.
так себе определение

Pavel
18.04.2019
10:31:10
тем более что в пхп, где что угодно может динамически появиться откуда угодно, модули будет очень сложно поддерживать
В общем чем больше определений читаю тем больше кажется что модули это какая-то притянутая за уши фигня

dypa
18.04.2019
10:35:23

Pavel
18.04.2019
10:35:32
Неймспейсы это по факту целое дерево модулей - ты можешь импортировать сразу кучу классов используя более глобальный неймспейс use My\Namespace; , а можешь импортировать подмножество use My\Namespace\Utils
Вот только не хватает inner/private модификаторов для классов, действительно

dypa
18.04.2019
10:37:02

Dmitry
18.04.2019
10:38:50
основная проблема пхп в плане модулей - это глобальность видимости классов
это дает две проблемы - невозможность выделить экспортируемый интерфейс библиотеки и невозможность подключения библиотек с одинаковым неймспейсом

Pavel
18.04.2019
10:39:02
Ну одну функцию импортировать - это пожалуйста. А импортировать все функции в локальный скоуп - значит засрать его, при этом ты даже не можешь понять что именно туда импортнулось.

Dmitry
18.04.2019
10:39:44
хотя второе, если честно, может и к лучшему... порой очень мешает, но в результате профит в виде упрощения дерева зависимостей... но порой приходится долго костылять

Pavel
18.04.2019
10:40:08
Второе ты и так можешь сделать

Dmitry
18.04.2019
10:40:32
а первое... вполне себе можно решить соглашениями... вон живет питон на соглашениях...

Pavel
18.04.2019
10:41:42
А для первого - представь что ты используешь функцию kek() в своем коде, и импортируешь все из какого-нибудь неймспейса \Spacex\*. Потом кто-то добавил в этот неймспейс функцию kek(), ты обновил у себя модуль, и вуаля, твоя функция kek() модменилась функцией kek() из неймспейса а ты даже и не заметил.

Dmitry
18.04.2019
10:41:55
вопрос стат анализа, решается тоже

Pavel
18.04.2019
10:42:58
Так что лучше уж импортировать неймспейс в какой-то локальный неймспейс типа use My\Very\Long\Name\Space\Utils as Utils и в коде обращаться по Utils\kek()
И вроде бы в typescript так же сделано

Dmitry
18.04.2019
10:43:44
интерпретатор не нужно, стат анализа достаточно

dypa
18.04.2019
10:44:32
а еще лучше не писать на пхп, бери перл и обмазывайся модулями

Pavel
18.04.2019
10:44:51
Брать перл это некрофилия

Google

Pavel
18.04.2019
10:49:25
А какая разница как называть если эффект одинаковый?
область видимости - это тоже концептуальный сахар, через таблицы текущих видимых символов

Admin
ERROR: S client not available

Pavel
18.04.2019
10:50:39
Так что нет, не смущает.

dypa
18.04.2019
10:51:51
проще ныть про несовершенство пхп

Dmitry
18.04.2019
10:52:33
не нужно нафиг... только от совсем идиотов, а им закон не писан

dypa
18.04.2019
10:52:52
чего ж ты нам их скидываешь?!

Pavel
18.04.2019
10:53:20
Как это не делает ничего? Если ты напишешь use function \My\Cool\func то у тебя func импортируется в текущую область видимости, просто эта область - только файл/неймспейс, мельче нельзя.

Dmitry
18.04.2019
10:53:20
можешь указать его руками
автолоад - это автоматический импорт
не хочешь автоматическийимпорт - можешь писать руками require
профит

dypa
18.04.2019
10:54:57

Dmitry
18.04.2019
10:55:56
смысл сего набора слов мне не понятен
зачем мне это делать?

Pavel
18.04.2019
10:58:01
Ты демагогствуешь. Если после выполнения `use function \My\Cool\func` я могу в файле обратиться к функции `func` используя 4 символа, то это и есть по определению импорт в текущий скоуп. А как это под капотом сделано уже вопрос десятый.
А, ну ты смешал с автолоадингом. Ну так все давно уже композер автолоадит, а мейнтейнеры пакета в "autoload" приписывают какой файл с функциями прогрузить.
Я тебе могу привести аналогию с исходниками в c# - там если файл "MyLib.cs" не прописан в xml конфиге специальном то сборщик этот файл вообще не увидит. То же самое.
Ну в пхп область видимости одна на весь файл, ну и что.
С его привычкой иметь много маленьких файлов это не проблема.
А импортировать любые выбранные символы из любого модуля в любой скоуп - это очень геморно потом при чтении кода, я такое тоже ощущал.

Google

Pavel
18.04.2019
11:07:59
На неймспейс в рамках файла, конечно ;) Но в 99% случаев в файле не более одного неймспейса.

dypa
18.04.2019
11:09:13
область видимости класса не забыл?