Перейти к публикации
sneakquie

PHP Реализация ООП в PHP посредством самого PHP

Рекомендованные сообщения

sneakquie

Привет, друзья.

Пару дней я занимался фиг знает чем, но для меня это был самый интересный опыт в PHP-приблудах. Я реализовал ООП в PHP, почти равную по уровню встроенным возможностям OOП, посредством возможностей самого языка.

Хочу рассказать, как это устроено, а перед этим напишу немного истории. Началось всё с того, что я хотел построить QueryBuilder в процедурном стиле, хотел сравнить скорость и удобство. Сделано всё было довольно банально: каждая функция принимала необходимые по её логике аргументы, плюс массив с результатами предыдущих функций из этой же библиотеки. Встал вопрос об удобстве использования этих функций — им недоставало общего ресурса, где они могли бы хранить промежуточный результат, чтобы каждый раз не передавать его как аргумент. Первое (если честно, и последнее), что пришло в голову это статические переменные функций, ибо глобальными пользоваться не всегда удобно и правильно, да и не совсем эстетично будет выглядеть. Написана функция — подобие стека со статической переменной в качестве хранилища. Следующей проблемой стала инкапсуляция, ведь функцию можно вызывать из любого места, каждый может вертеть хранилищем, как сам захочет, что как бы не подобает. Немного порывшись и интернете (я новичок в php, поэтому даже не надеялся найти такую функцию, но сердце-таки чуяло), я нашёл интересную штуку — debug_backtrace, которая существует c 4 версии этого самого языка. Возвращает она массив данных о функциях, которые были «родителями» для источника беспокойства самой debug_backtrace, то бишь функции, из которой она была вызвана. Этот инструмент годится для дебага, но продашн-замены ему не было найдено, поэтому пусть всё остаётся, как было. Замена инкапсуляции в стиле ООП (без модификаторов доступа, но всё же) была найдена, далее были: нелепая идея, потуги тугой башки как-то красиво это оформить и закодить, которые, как ни странно, дали кое-какие плоды.

«В коробке» имеются модификаторы доступа, классы, объекты, интерфейсы, имплементация, множественное наследование (с возможностью перезаписи ранее унаследованных методов и свойств, либо истерического крика при отсутствии оной), магические методы (конструкторы, сеттеры, геттеры, callstatic’и и т.д.), клонирование. Чего нет, так это абстрактных классов и констант. О первом я забыл, а второе посчитал тут неуместным. «Детище» требует PHP версии 5.4 и выше.

 

Предвкушая толику негодования, отвечу на пару вопросов.

Х: А ты вообще знал, что обратные функции в этом языке реализованы как объекты класса Closure?

Я: Да, знал.

 

Х: Извиняюсь, но какой от этого прок?

Я: Абсолютно никакого, просто было нечего делать. Реализовано слишком коряво, да и использовать это нигде (прям вообще) нельзя.

 
Только сделал пуш на гитхаб, https://github.com/sneakquie/ClassLib
Магические методы - https://github.com/s...gic_methods.php
Множественное наследование, переопределение методов, интерфейсы - https://github.com/s...ple_extends.php

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...