Pull to refresh

Comments 8

По-моему, в новой версии PHP хотят задействовать наработки PHPNG
но уже сейчас всем в PHP community понятно, что это основной претендент на ядро следующей версии PHP
Интересно, phpng позволит делать типизированные скалярные параметры функции и автоподгрузку функций? Голосую, в общем, за доклад!
Нет. Изменения в phpng относятся только к нутру рантайма (я так понял оптимизированы zval контейнеры, управление памятью, переписана виртуальная машина). Тайп хинтинг для скаляров уже существовал и до этого в виде отдельного патча и даже расширения (было даже предложение запилить это дело в php 5,5 но отказались). Автоподгрузка функций — вопрос только автоподгрузки, это слабо связано с runtime (с его реализацией). Ну и это так же предложение было отклонено. Возможно если предложат более приличную реализацию — то может и появится, но в таком виде это в php не нужно. Да и кейс сомнительный.
Жаль.
Да и кейс сомнительный.

Сразу скажу, не ради холивара, но…
Вызывать функцию из библиотеки удобно. Например, как библиотека Math. Да это реализуется статическими методы, но, во-первых, в PHP нет partial class, а значит нельзя разнести библиотеку по разным файлам, во-вторых, в PHP есть разница между обращением к namespace и к статическим методам (да да, paamayim nekudotayim). И синтаксис страдает из-за этого: \Math\Trigonometry::cos, но \Math::sum, к примеру. Второй пункт дело вкуса, конечно же.
В-третьих, не все такие ярые поклонники ООП и lisp-way мне лично ближе по духу. Но видимо, мнение большинства важнее, так что остается только мечтать, ну ничего без автодополнений тоже живут и жили люди.
без автоподгрузки, вы хотели сказать.

Вопрос в том, что на данный момент небыло предложено ни одного адекватного примера реализации (даже просто на уровне предложения, без конкретно реализации) автоподгрузки функций. Все что я пока видел в обсуждениях либо выглядело ужасно, либо ломало обратную совместимость со всеми стандартными автозагрузчиками. Никто не мешает выдвинуть на обсуждение идею реализации, если она есть. Если есть объективные prof/cons и т.д.

Что до разнесения функций по неймспейсам — такая возможность есть, причем с версии 5,6 даже относительно полноценная. Разве что вопрос автоподгрузки посчитали лишним для этого обсуждения. Да и очень много сложностей, скажем у вас есть такая структура:
src/
   |-  Math/
           | - trigonomerty.php // Math\cos(), Math\sin()
           | - common.php // Math\max(), Math\min()


Как бы вы организовали автоподгрузку при таком случае?

В контексте этого вопроса намного выгоднее иметь какой-то механизм модулей, что бы все было аккуратненько инкапсулировано в него, как это делается допустим в python.

Собственно так же и с тайп хинтингом для скаляров. Слишком много нюансов изза системы типов PHP, а точнее нюансы с приведением типов.
Как бы вы организовали автоподгрузку при таком случае?

Видимо:
Точно так же как и подгрузку классов, т.е. перебираем файлы пока не найдется нужна функция, а уж как мы реализуем autoload чтобы эффективно работало — наше дело. Разнесение функций по разным файлам. Благо компиляторы байт-кода прекрасно справляются с большим количеством файлов.
без автоподгрузки, вы хотели сказать.

Нет, я про autocomplete. Сейчас приходится создавать файл с анонимными функциями, что-то вроде
<?php
return array(
'func' => function($a, $b, $c){}
);

Соответственно при вызове такой функции, подстветки параметров нет.

Вопрос в том, что на данный момент небыло предложено ни одного адекватного примера реализации (даже просто на уровне предложения, без конкретно реализации) автоподгрузки функций. Никто не мешает выдвинуть на обсуждение идею реализации, если она есть. Если есть объективные prof/cons и т.д.

Предложения по принципу работы или по способу реализации этого в исходниках PHP?

Все что я пока видел в обсуждениях либо выглядело ужасно, либо ломало обратную совместимость со всеми стандартными автозагрузчиками.

Хм, странно, казалось бы, никакой связи с загрузкой классов нет.
Sign up to leave a comment.