Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

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.

> Metaprogramowanie w PHP
kwiateusz
post 21.05.2008, 16:56:51
Post #1


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




Na prośbę empathon'a zakładam niniejszy temat smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dariuszp
post 9.09.2010, 23:07:35
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
Go to the top of the page
+Quote Post

Posty w temacie
- 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
- - dariuszp   Metaprogramowanie. Temat na tyle obszerny i dla mn...   9.09.2010, 23:07:35


Reply to this topicStart new topic
4 Użytkowników czyta ten temat (4 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 02:40