Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Реализация ООП в PHP посредством самого PHP
Покинул форум
Сообщений всего: 7
Дата рег-ции: Март 2013
Помог: 0 раз(а)
Привет, друзья.
Пару дней я занимался фиг знает чем, но для меня это был самый интересный опыт в PHP-приблудах. Я реализовал ООП в PHP, почти равную по уровню встроенным возможностям OOП, посредством возможностей самого языка.
Хочу рассказать, как это устроено, а перед этим напишу немного истории. Началось всё с того, что я хотел построить QueryBuilder в процедурном стиле, хотел сравнить скорость и удобство. Сделано всё было довольно банально: каждая функция принимала необходимые по её логике аргументы, плюс массив с результатами предыдущих функций из этой же библиотеки. Встал вопрос об удобстве использования этих функций — им недоставало общего ресурса, где они могли бы хранить промежуточный результат, чтобы каждый раз не передавать его как аргумент. Первое (если честно, и последнее), что пришло в голову это статические переменные функций, ибо глобальными пользоваться не всегда удобно и правильно, да и не совсем эстетично будет выглядеть. Написана функция — подобие стека со статической переменной в качестве хранилища.
Следующей проблемой стала инкапсуляция, ведь функцию можно вызывать из любого места, каждый может вертеть хранилищем, как сам захочет, что как бы не подобает. Немного порывшись и интернете (я новичок в php, поэтому даже не надеялся найти такую функцию, но сердце-таки чуяло), я нашёл интересную штуку — debug_backtrace, которая существует c 4 версии этого самого языка. Возвращает она массив данных о функциях, которые были «родителями» для источника беспокойства самой debug_backtrace, то бишь функции, из которой она была вызвана. Этот инструмент годится для дебага, но продашн-замены ему не было найдено, поэтому пусть всё остаётся, как было. Замена инкапсуляции в стиле ООП (без модификаторов доступа, но всё же) была найдена, далее были: нелепая идея, потуги тугой башки как-то красиво это оформить и закодить, которые, как ни странно, дали кое-какие плоды.
«В коробке» имеются модификаторы доступа, классы, объекты, интерфейсы, имплементация, множественное наследование (с возможностью перезаписи ранее унаследованных методов и свойств, либо истерического крика при отсутствии оной), магические методы (конструкторы, сеттеры, геттеры, callstatic’и и т.д.), клонирование. Чего нет, так это абстрактных классов и констант. О первом я забыл, а второе посчитал тут неуместным.
«Детище» требует PHP версии 5.4 и выше.
Предвкушая толику негодования, отвечу на пару вопросов.
Х: А ты вообще знал, что обратные функции в этом языке реализованы как объекты класса Closure?
Я: Да, знал.
Х: Извиняюсь, но какой от этого прок?
Я: Абсолютно никакого (может кому интересно будет), просто было нечего делать. Реализовано слишком коряво, да и использовать это нигде (прям вообще) нельзя.
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
Прок всегда есть. Наверное, ты неплохо прокачался в процессе написания.
----- Март 2021. Бросил программирование
sneakquie
Отправлено: 11 Сентября, 2014 - 20:17:18
Новичок
Покинул форум
Сообщений всего: 7
Дата рег-ции: Март 2013
Помог: 0 раз(а)
2caballero
Да просто так, делать было нечего. Думал, может кому интересно будет, поэтому и выложил. Мне, к примеру, любопытно было бы посмотреть на любую реализацию механизма, дня, этак, три-четыре назад, сейчас же вся магия пропала
2dcc0
Да, довольно-таки круто прокачался, много новых, полезных функций узнал. Да и для портфолио сгодится; только минус в том, что действительно нигде использовать нельзя, но зато опыта побольше.
Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012 Откуда: Воронеж
Помог: 50 раз(а)
Все когда-нибудь занимались бессмысленной хернёй вместо того, чтобы действительно начать делать что-то полезное.
dcc0
Отправлено: 11 Сентября, 2014 - 22:04:02
Участник
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
sneakquie
оФфтопну немного. Когда-то, несколько нет назад, болея гриппов, я установил Linux Gentoo и на пару месяцев исчез, опыт отличный. = ) отличная практика набивать скрипты в консоль
Отвлеченно:
но... наибольший прок (конечно, практика важна) от чтения качественной литературы (если она есть конечно). Хотя, может кому как... Пока не сядешь за руль, не поймешь, каково это - водить
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.