Собираем вопросы авторам PHP - они ответят на PHPConf 2008

WP

^_^
Вопрос:
Когда будет:
PHP:
$a = function ($b) {echo $b('Hello World');}
$a(function ($string) {echo $string;});
? Было бы очень здорово жонглировать функциями, как в Javascript.
create_function не катит т.к. неудобно.

з.ы. т.е. надо добавить языковую обертку для create_function, помоему это очень нетрудно сделать, если задано имя функции то определяем его, а если оно пусто, т.е. function (), то возвращаем результат create_function().
 

AmdY

Пью пиво
Команда форума
WP
а зачем тебе это, в javascript это затычка
это больше напоминает eval
 

Wicked

Новичок
AmdY
create_function как раз и напоминает eval :)
а лямбда-функции - имхо вполне себе красивое средство.
 

fixxxer

К.О.
Партнер клуба
про лямбда-функции Тони уже ответил на первой странице

send a patch or shut up вобщем =))
 

WP

^_^
fixxxer
Ну дык это призыв к товарисчам разработчикам чтобы внесли в TODO.
 

fixxxer

К.О.
Партнер клуба
кстати с лямбда-функциями все не так просто - это в текущей реализации, если я не ошибаюсь, и есть eval, соответственно, получаем постоянный запуск компилятора, отсутствие кэширования байткода акселератором - соответственно если сделать более удобный синтаксис но оставить как есть реализацию получаем проблемы с производительностью
 

crocodile2u

http://vbolshov.org.ru
$a(function ($string) {echo $string;});
А чем не устраивает [гораздо более разумный подход, ИМХО] следующее:

PHP:
<?php
$a('function_name_here');
?>
Можно и методы классов/объектов таким образом передавать как коллбэки...
 

AmdY

Пью пиво
Команда форума
зачем это, если можно function_name_here($a) , а главное function_name_here можно затем реиспользовать.
гораздо интереснее function_name_here($a)[0] или function_name_here($a), хотя это такой салат получится, что лучше не нужно.
 

fixxxer

К.О.
Партнер клуба
по хорошему, если уж делать лямбда-функции, то надо делать и замыкания.
иначе смысла не так то много
 

StUV

Rotaredom
мне недавно понадобился аналог автолоада для инклуда
было бы неплохо добавить мэджик include_/require
правда как я ни пытался объяснить Тони зачем оно мне - он так ни одного моего аргумента не посчитал достаточно весомым
(цель простая - пришлось немного поизвращаться над загрузчиком ZF при включении его в собственный фреймворк - все получилось, но если б был __include_once - было бы намного проще)
 

crocodile2u

http://vbolshov.org.ru
StUV
Даже несмотря на то, что ты описал свою цель - смысла в __include_once не увидел :(.
 

Rashkin

Новичок
crocodile2u

Ну, стало быть, обратимся к источникам: http://ru2.php.net/manual/en/objaggregation.examples.php ... Что же мы видим?
товарищь простите но это бред.
Потому что перевод на русский язык того что написано в мануале я считаю такой:
Мы с этой ситуацией сделать ничего не можем. Вы конечно можете и если у вас нет проблем с тем что ошибка компиляции теперь станет для вас ошибкой логики нам то вобще пофигу
Исходя из этого я и говорю нет множественного наследования.

Товарищь, все что мы там увидили это решение которое мало удовлетворяет.

мало того что мы плодим лишний код в обоих вариантах.

так еще и наслаиваются проблемы связывания модулей и проверки типов данных.

придеться порядком подзамарочиться чтобы до инициализации объекта одного класса у вас всегда был загружен другой класс, другие десять классов
проверка при инициализации??? ну лишний еще код? так вот это не просто. видите ли
И как следствие еще один недостаток php: оператор new - всегда возвращает объект, хотя иногда бы хотелось чтобы при инициализации создавалась критическая ситуация, что мол нельзя сделать так чтобы был создан объект. мол ошибки при инициализации. тогда при отладки было бы проще отловить эту ситуацию.
Во втором примере нужно подзамарочиться чтобы объект передаваемый был обязательно объектом нужного класса. что опять написание лишнего кода. лишней проверки
 

crocodile2u

http://vbolshov.org.ru
Ну все ясно - пациент Rashkin неоперабелен. Скажи, дорогой друг, чего ты вообще вцепился в эти функции aggregate_* ??? Забудь про них. Вообще. Выкинь из головы. Этих функций нету. А агрегация - есть. И, несмотря на то, что множественного наследования в ПХП нет - его можно отлично сэмулировать, используя агрегацию и __call(). На сем все споры на данную тему я лично прекращаю как бессмысленные.

ЗЫ. ах, да... надо объяснить, почему я считаю пациента не подлежащим лечению:
1. не умеет читать.
2. приводит какие-то "переводы" непонятно откуда взявшихся текстов.
3. говорит о себе во множественном числе.
 

Rashkin

Новичок
Ну если я должен ответить только на
Скажи, дорогой друг, чего ты вообще вцепился в эти функции aggregate_* ???
то в общем считаю это как бы по теме форума. Считаю что раз уж php5 и php4 так резко отличаются в сторону ООП то было бы не плохо и далее развивать эту линию.

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

спасибо за внимание
 

AmdY

Пью пиво
Команда форума
Вот надумал вопрос, только он не о высоком ООП
Очень хотелось бы иметь возможность залочить переменную, по подобию работы с файлами, чтобы на определённом этапе кода её нельзя было менять или считывать без разлочивания
Не знаю насколько это архитектурно красиво, но чертовски нужная штука при групповой разработке, особенно если исполнители некоторые - шибко умные студенты.

p.s. скачал, новый мануал, буду почитывать, а то я заметил. что всё, что нужно разработчики уже придумали, но иногда об этом ещё не знаешь
 

crocodile2u

http://vbolshov.org.ru
Rashkin
Ваши личные убеждения по тому что можно легко сэмулировать я ломать не собираюсь
Ну, конечно. У меня ведь есть отличный контр-аргумент при необходимости: 15-20 строчек кода.
Я считаю что есть вещи, которые не нужно было бы эмулировать, если бы изначально задуматься
Задумываться надо было раньше, читать/писать в @internals. И вот еще информация к размышлению: Java - один из самых продвинутых ОО-языков - не имеет множественного наследования. Смоллтолк (поправьте меня, если я ошибаюсь) - тоже... Думаешь, это просто так?

ЗЫ. про ошибки я вообще не понял, к чему сказано...
 

berkut

Новичок
не понятно, если 2 родителя имеют одинковые имена и сигнатуры методов, то как определить, что будет в предке?(в плане пхп)
 

Gas

может по одной?
Java - один из самых продвинутых ОО-языков - не имеет множественного наследования.
давно уже хотел это написать. В С# тоже нет. Значит это не такая уж и необходимая функциональность.
 

Wicked

Новичок
почему до сих пор у нас нету всяких полезных типов данных типа питоновских tuple, set, list, ... ?
 
Сверху