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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
sneakquie
Отправлено: 11 Сентября, 2014 - 19:16:48
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Март 2013  


Помог: 0 раз(а)




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

Предвкушая толику негодования, отвечу на пару вопросов.
Х: А ты вообще знал, что обратные функции в этом языке реализованы как объекты класса Closure?
Я: Да, знал.

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

Только сделал пуш на гитхаб, https://github[dot]com/sneakquie/ClassLib
Singleton - https://github[dot]com/sneakquie/Cla[dot][dot][dot]es/singleton.php
Builder - https://github[dot]com/sneakquie/Cla[dot][dot][dot]ples/builder.php
Object pool - https://github[dot]com/sneakquie/Cla[dot][dot][dot]/object_pool.php
Registry - https://github[dot]com/sneakquie/Cla[dot][dot][dot]les/registry.php
Магические методы - https://github[dot]com/sneakquie/Cla[dot][dot][dot]agic_methods.php
Множественное наследование, переопределение методов, интерфейсы - https://github[dot]com/sneakquie/Cla[dot][dot][dot]iple_extends.php
 
 Top
caballero
Отправлено: 11 Сентября, 2014 - 19:47:32
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




так и не понял для чего это


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
dcc0
Отправлено: 11 Сентября, 2014 - 19:48:57
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Прок всегда есть. Наверное, ты неплохо прокачался в процессе написания.


-----
Март 2021. Бросил программирование
 
 Top
sneakquie
Отправлено: 11 Сентября, 2014 - 20:17:18
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Март 2013  


Помог: 0 раз(а)




2caballero
Да просто так, делать было нечего. Думал, может кому интересно будет, поэтому и выложил. Мне, к примеру, любопытно было бы посмотреть на любую реализацию механизма, дня, этак, три-четыре назад, сейчас же вся магия пропала Недовольство, огорчение
2dcc0
Да, довольно-таки круто прокачался, много новых, полезных функций узнал. Да и для портфолио сгодится; только минус в том, что действительно нигде использовать нельзя, но зато опыта побольше.

(Отредактировано автором: 11 Сентября, 2014 - 20:18:10)

 
 Top
avtor.fox
Отправлено: 11 Сентября, 2014 - 21:56:15
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)





Все когда-нибудь занимались бессмысленной хернёй вместо того, чтобы действительно начать делать что-то полезное.
 
 Top
dcc0
Отправлено: 11 Сентября, 2014 - 22:04:02
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




sneakquie
оФфтопну немного. Когда-то, несколько нет назад, болея гриппов, я установил Linux Gentoo и на пару месяцев исчез, опыт отличный. = ) отличная практика набивать скрипты в консоль Улыбка
Отвлеченно:
но... наибольший прок (конечно, практика важна) от чтения качественной литературы (если она есть конечно). Хотя, может кому как... Пока не сядешь за руль, не поймешь, каково это - водить


-----
Март 2021. Бросил программирование
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB