Комментарии 9
Коментарии к голосованию, критика и замечания приветствуются
мой топик уже слили по метапрограммингу))
И так вот он класс с каррирующим методом, который и реализует (простите за каламбур) частичное использование метода класса. При этом, создается псевдометод, который и вызывается (опять скаламбурил) магическим методом __call():
Поясните, пожалуйста, в чём здесь заключаются каламбуры?
Не понял смысла Вашего подхода. Если у Вас есть возможность добавлять свои методы в класс, то зачем это делать таким способом? В чём выигрыш?
Что бы познать сакральный смысл поста, для, начала ВНИМАТЕЛЬНО прочтите пост, на который я ссылался вначале, а затем мой. И если вы не сможете понять его, то видимо, Вы просто не на тот путь встали.
Там берётся существующая(произвольная) функция и каррируется, и получается новая функция. При этом исходная функция не меняется и не знает, что ее каррировали.
Применительно к объектам вижу два пути. Каррируем метод объекта и получаем…
1.… новую функцию;
2.… новый объект с тем же интерфейсом плюс новый метод.
Оба случая должны оперировать произвольным объектом с произвольными методами. При чем так, чтобы ни объект, ни методы не знали о том как с ними обращаются.
В Вашем же подходе, чтобы каррировать метод объекта нужно вмешаться в иерархию наследования и изменить конструктор.
Применительно к объектам вижу два пути. Каррируем метод объекта и получаем…
1.… новую функцию;
2.… новый объект с тем же интерфейсом плюс новый метод.
Оба случая должны оперировать произвольным объектом с произвольными методами. При чем так, чтобы ни объект, ни методы не знали о том как с ними обращаются.
В Вашем же подходе, чтобы каррировать метод объекта нужно вмешаться в иерархию наследования и изменить конструктор.
Да, я с вами согласен, но не во всем. Функция каррирует функцию, а метод каррирует метод. И по этому если мы каррируем метод, то и получаем мы новый метод (именно метод, а не функцию, как сказано у вас). И каррируемый метод, так же не догадывается, что его каррировали. А так как в PHP нет множественного наследования, то мы не можем наследоваться от двух и более классов, и что бы сделать так, «чтобы ни объект, ни методы не знали о том как с ними обращаются», я в конце топика подытожил, что класс, можно переписать в trait. Да и в конструктор не нужно вмешиваться, т.к. createMethod() имеет область видимости public.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Объектно-ориентированное функциональное метапрограммирование