Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.
Post
#1
|
|
|
Admin Techniczny Grupa: Administratorzy Postów: 2 072 Pomógł: 93 Dołączył: 5.07.2005 |
Na prośbę empathon'a zakładam niniejszy temat (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 9.09.2010 Ostrzeżenie: (0%)
|
Metaprogramowanie. Temat na tyle obszerny i dla mnie mało znany że sam nie wiem czy dobrze go rozumie ale chciał bym o coś zapytać.
Otóż swego czasu poszedłem sobie na spore ułatwienie. Otóż pisałem mappery do dość obszernej bazy danych i miało to troszkę potrwać. Dopóki nie wpadłem na mały pomysł. Otóż dopisałem po prostu kod PHP który zwyczajnie w wypadku braku obiektu danych dla mappera bazy danych łączy się z bazą, pobiera informacje o tabeli do której odnosi się mapper (lub tabel, kwestia co mapper dokładnie robi ale takich co odnoszą się do +1 tabeli mam mało) i... tworzy klasę obiektu danych dla tej tabeli i zapisuje do pliku. Taki plik jest później po prostu includowany przez system. Podobnie jest z mapperami ale tu zaoszczędza mi to tylko połowę pracy. Bo czasami mapper potrzebuje specyficzną metodę tylko dla siebie. Jednak i tak mam oszczędzone żmudne klepanie. W każdym razie PHP wychodzi na przeciw naszym potrzebą. Mój system nie tylko potrafi sobie wygenerować obiekt danych jeżeli nikt go nie zapewni na podstawie bazy danych ale tez i na podstawie mappera (który ma bazę translacji gdzie wewnętrzna zmienna bądź tablica ma info co powinno się przyporządkować jakiemu atrybutowi obiektu danych). Osiągnąłem to w dość prosty sposób (choć jak pierwotnie o tym pomyślałem to wydawało mi się to niemożliwe). Użyłem token_get_all();. Funkcja ta jest w stanie wczytać z pliku kod PHP, rozbić go na czynniki pierwsze i zaserwować nam tablicę. Używając token_name() identyfikuję cyferki na nazwy i łatwo wyłapuje elementy składni. Ich lista znajduje się tutaj: http://www.php.net/manual/en/tokens.php W skrócie. PHP jest w stanie W PEŁNI zanalizować kod PHP a co dalej zrobicie to Wasza sprawa. Pamiętajcie tylko by zachować to na specjalne przypadki bo nie są to operacje lekkie. Sam umieściłem takie rozwiązanie tylko w paru drobnych miejscach jak właśnie przy mapperach. W razie gdy nie chce mi się tworzyć obiektów danych bądź też po prostu zapomniałem o tym, system sam zaopiekuje się tym problemem jeżeli odnajdzie mappera bądź tabelę w bazie danych. I taka ciekawostka dla Was. Swego czasu napisałem małe narzędzie które odchudziło mi kod PHP. Powyższym sposobem wyciąłem WSZYSTKIE białe znaki (co najlepsze nie potrzeba wyrażeń regularnych, ciągi znaków w "" i '' są oznaczone w tablicy jako string, reszta jako elementy składni więc nie można wyciąć białych znaków np z komunikatów przypadkiem), komentarze itp. Po instrukcjach wstawiłem spację (żeby nie dostać classDatabase tylko class Database) no i upewniłem się że po -> nie ma spacji ( $obiekt->include() to nie to samo co $obiekt -> include() ) a całą resztę zostawiłem w spokoju. Pozbyłem się też komentarzy. Wyszło na to że 31% mojego kodu w systemie to spacje, tabulatory i komentarze. Ponieważ rozmiar plików zmniejszył się do 69%. W każdym razie PHP potrafi o siebie zadbać :-) W każdym razie to pytanie: Czy gdy system sam się potrafi odchudzić (wywołując sobie odchudzanie na nowych plikach, dorabianie sobie obiektów danych w razie czego itp), uzupełnić itp wg wytycznych (listę tego co usunąć np umieszczam w phpdoc nad metodą która to robi. PHP jest w stanie również dobrać się od tych komentarzy. A ktoś czytając kod klasy jest w stanie powiedzieć co ona wywali. Mało tego, modyfikując komentarz modyfikuje zachowanie klasy.) itp to możemy tutaj mówić o metaprogramowaniu ? Ten post edytował dariuszp 9.09.2010, 23:11:03 |
|
|
|
kwiateusz Metaprogramowanie w PHP 21.05.2008, 16:56:51
LoPMX Czegos takiego nie ma
Zapraszam na http://www.ru... 24.06.2008, 19:04:47
radex_p http://pl.wikipedia.org/wiki/Metaprogramowanie
... 24.06.2008, 19:06:20 
orglee No ja właśnie nie mam pojęcia co to... 25.07.2008, 21:10:00
LoPMX Tzn. ze uwazasz
[PHP] pobierz, plaintext <?ph... 24.06.2008, 19:37:20
Cysiaczek @LoPMX - nie, to jest wykorzystanie możliwości skł... 24.06.2008, 19:42:21
LoPMX @ Cysiaczek : Ale po co podsylasz oczywiste linki?... 24.06.2008, 20:06:48 
Sedziwoj Cytat(LoPMX @ 24.06.2008, 21:06:48 ) ... 30.06.2008, 08:56:19 
michalkjp Cytat(LoPMX @ 24.06.2008, 21:06:48 ) ... 17.10.2008, 11:14:00 
Sedziwoj Cytat(michalkjp @ 17.10.2008, 12:14:0... 17.10.2008, 12:30:47
mike W PHP można bardzo dobrze symulować meta... 24.06.2008, 20:08:33
splatch Jakiś czas temu pisałem o adnotacjach w PHP. Jest ... 2.07.2008, 07:22:11
wrzasq a ja sie zgadzam z LoPMX (nie tylko w tym, ze PHP ... 3.07.2008, 11:41:43
mike ~wrzasq a może zamiast pisać posty w odp... 3.07.2008, 11:48:28
Kocurro Pozwolicie drodzy koledzy, że włączę się w tą dysk... 25.07.2008, 10:37:59
Tubis IMHO Metaprogramowanie jest to uzupełnianie aplika... 26.07.2008, 11:29:42
nasty Z tego co zauważyłem, nie do końca wszyscy się zga... 9.08.2008, 22:48:45 
szopen Cytat(nasty @ 9.08.2008, 23:48:45 ) Z... 29.08.2008, 17:47:44
MajareQ Przepraszam, że nie przeczytałem wszystk... 14.10.2008, 21:07:50
Sedziwoj @MajareQ
Skoro wszytko jest tak proste dla Ciebie,... 15.10.2008, 00:05:17
MajareQ Sedziwoj, nie zrozumiałeś chyba mojej prośby.
Pro... 15.10.2008, 10:38:49
Kocurro Z tego co rozumie to metaprogramowanie to pisanie ... 15.10.2008, 14:06:46
skowron-line @MajareQ tu poczytaj.
http://wazniak.mimuw.edu.pl/... 15.10.2008, 15:05:40
Cysiaczek @ 2 powyższe posty - Proszę nie robić offtopów 17.10.2008, 13:30:03
michalkjp @Cysiaczek
Ok, już nie będę (n... 17.10.2008, 14:16:15
pawkow PHP Jak najbardziej pozwala na metaprogramowanie, ... 20.10.2008, 23:05:13
Sh4dow Nie wiem czy dobrze zrozumiałem dość obszerny post... 21.10.2008, 14:38:22
Spawnm http://pl.wikipedia.org/wiki/Metaprogramowanie
Met... 21.10.2008, 14:48:24
Sedziwoj @Spawnm
Nie do końca o ten sens chodzi w tym temac... 21.10.2008, 15:52:34
bigZbig Jeśli pod pojęciem metaprogramowanie rozumiemy ... 21.10.2008, 17:43:02
bregovic Jako ciekawostka, dzięki funkcjom lambda, od PHP5.... 3.11.2008, 00:52:46 
tuner Cytat(bregovic @ 2.11.2008, 23:52:46 ... 3.11.2008, 12:32:38
bigZbig Wzbogacanie klas o dodatkowe metody jest od dawna ... 19.02.2009, 15:34:40
erix CytatNie moge sie doczekac PHP 5.3 i pierwszego pr... 11.04.2009, 19:42:50
erix Cytatpowiedz mi jak na hostingu umiescic cos poza ... 15.04.2009, 17:15:39
bigZbig Prawdą jest, że porządny hosting udostępnia katalo... 15.04.2009, 20:40:31
Nattfarinn Nie chcę specjalne marudzić, ale czy temat nie tyc... 11.05.2009, 16:16:09
metadetron Nie wiem czy to już metaprogramowanie czy tylko ge... 10.05.2010, 10:47:25 ![]() ![]() |
|
Aktualny czas: 4.12.2025 - 15:11 |