Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PDO i współpraca z własnymi klasami
Jawor
post
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 2
Dołączył: 1.10.2003

Ostrzeżenie: (0%)
-----


Witam

Mam pytanie odnośnie współpracy PDO z własnymi klasami.

Ktory sposob powinno sie uzywac:

1. Polaczenie z baza poza klasa (wlasna) i przekazywanie do niej obiektu typu PDO. Wszystkie zapytania, operacje na danych z bazy odbywaja sie we wlasnej klasie.

2. Wszystkie operacje zwiazane z baza odbywaja sie poza wlasna klasa (zapytania, pobieranie danych), a do mojej klasy przekazuje juz np. pobrane z bazy dane.


Do tej pory caly czas pisalem strukturalnie, ale postanowilem to zmienic i oto pierwszy dylemat jaki napotkalem na swojej drodze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Jawor 9.11.2008, 16:27:35
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
markac
post
Post #2





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.02.2005

Ostrzeżenie: (10%)
X----


Sorry orglee, ale ja już wolę __autoload. W systemie nie powinny wystąpić klasy o tych samych nazwach i dlatego ryzyko kolidowania klas spada do minimum. Przykład:

Andrew: 03-Nov-2006 12:26

  1. <?php
  2.    function __autoload($class_name)
  3.    {
  4.        //class directories
  5.        $directorys = array(
  6.            'classes/',
  7.            'classes/otherclasses/',
  8.            'classes2/',
  9.            'module1/classes/'
  10.        );
  11.      
  12.        //for each directory
  13.        foreach($directorys as $directory)
  14.        {
  15.            //see if the file exsists
  16.            if(file_exists($directory.$class_name . '.php'))
  17.            {
  18.                require_once($directory.$class_name . '.php');
  19.                //only require the class once, so quit after to save effort (if you got more, then name them something else
  20.                return;
  21.            }          
  22.        }
  23.    }
  24. ?>


Mamy w ten sposób także uzupełnianie kodu w Eclipse, oczywiście jeśli zastosujemy odpowiednie tagi dokumentujące same klasy. Co do Registry, chyba Ty to napisałeś, że istnieje możliwość nadpisania? Mylisz się. W takich przypadkach nie stosuje się get() i set(), a odpowiednio nazwane metody, np. getPDO(), getSession(). Mamy w ten sposób załatwione także uzupełnianie kodu i wykluczenie możliwości nadpisania kodu. Samo zastosowanie get i set jest to po prostu lenistwem, niedoświadczeniem i posiadaniem złych nawyków, o dziwo, dotyczy tylko programistów PHP?

Ten post edytował markac 3.12.2008, 09:27:06
Go to the top of the page
+Quote Post
starach
post
Post #3





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


Cytat(markac @ 3.12.2008, 09:23:38 ) *
Sorry orglee, ale ja już wolę __autoload. W systemie nie powinny wystąpić klasy o tych samych nazwach i dlatego ryzyko kolidowania klas spada do minimum.
Nie ma możliwości że wystąpią.
  1. <?php
  2. $ob = Instance::Get('library.template.cache.data.package.collection');
  3. ?>
Kod załaduje plik w katalogu "[projekt_root]/library/Template/Cache/Data/Package/Collection.php" ( wielkość liter nieprzypadkowa ) i utworzy obiekt klasy Template_Cache_Data_Package_Collection lub zwróci go z rejestru jeśli był już utworzony wcześniej.
W zmiennych klasowych stosuję nazewnictwo rozróżniające czy dana zmienne jest obiektem czy prymitywem ( $this->counter - obiekt $this->_counter = integer / float / double / etc. ). Mimo to nie wyobrażam sobie żeby nie napisać PHPDoc'owego @var celem lepszej czytelności i przejrzystości.

Cytat(markac @ 3.12.2008, 09:23:38 ) *
Co do Registry, chyba Ty to napisałeś, że istnieje możliwość nadpisania? Mylisz się. W takich przypadkach nie stosuje się get() i set(), a odpowiednio nazwane metody, np. getPDO(), getSession(). Mamy w ten sposób załatwione także uzupełnianie kodu i wykluczenie możliwości nadpisania kodu. Samo zastosowanie get i set jest to po prostu lenistwem, niedoświadczeniem i posiadaniem złych nawyków, o dziwo, dotyczy tylko programistów PHP?
Stosowanie setterów i getterów dla poszczególnych obiektów moim zdaniem nie jest wygodnym rozwiązaniem bo kompletnie burzy intuicyjność frameworka. Jest to coś czego nienawidzę na przykład w Joomli. Różnica między zaproponowanym przez ciebie rozwiązaniem i Jomlowym jest taka, że Joomla ma statyczne gettery w swoim rejestrze. Nazywam to singleton overflow. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował orglee 3.12.2008, 16:56:43
Go to the top of the page
+Quote Post
Black-Berry
post
Post #4





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat(orglee @ 3.12.2008, 16:52:57 ) *
Stosowanie setterów i getterów dla poszczególnych obiektów moim zdaniem nie jest wygodnym rozwiązaniem bo kompletnie burzy intuicyjność frameworka. Jest to coś czego nienawidzę na przykład w Joomli. Różnica między zaproponowanym przez ciebie rozwiązaniem i Jomlowym jest taka, że Joomla ma statyczne gettery w swoim rejestrze. Nazywam to singleton overflow. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)


Sory trochę zgubiłem się w temacie ale czy stosowanie getterów i setterów jest takie niezbędne do rozwiązania kontekstowego? Przecież wszystko można oprzeć o jakieś dziedziczenie. Gdzieś już tutaj pisałem o tym razem z przykładowym kodem. Każdy obiekt dziedziczący po obiekcie klasy Core_Context automatycznie może ustawiać sobie obiekty wymagane. Jeśli już chcemy wszystko zautomatyzować to poprostu każdy obiekt w naszym frameworku traktujemy jako Core_Object i po krzyku. Takie coś:

  1. <?php
  2. $ob = Instance::Get('library.template.cache.data.package.collection');
  3. ?>


Może i jest pomysłowe ale czy istnieje w jakimkolwiek poważnym oprogramowaniu? Wiem, że PHP można różnie traktować ale wydaje mi się że uniwersalne rozwiązania są najlepsze. Nawet jeśli nikt nie ma pracować w przyszłosci na Twoim kodzie tylko ty sam to trzeba dążyć do czegoś co akceptuje większość społeczności programistycznej nie tylko ta z PHP. (Sam mam jeszcze masę nietrafionych rozwiązań w swoim frameworku ale systematycznie je poprawiam. Nie piszę tutaj żeby komuś coś wytykać)

Pozdrawiam.
Go to the top of the page
+Quote Post
markac
post
Post #5





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.02.2005

Ostrzeżenie: (10%)
X----


Cytat(Black-Berry @ 4.12.2008, 14:49:57 ) *
Sory trochę zgubiłem się w temacie ale czy stosowanie getterów i setterów jest takie niezbędne do rozwiązania kontekstowego? Przecież wszystko można oprzeć o jakieś dziedziczenie. Gdzieś już tutaj pisałem o tym razem z przykładowym kodem. Każdy obiekt dziedziczący po obiekcie klasy Core_Context automatycznie może ustawiać sobie obiekty wymagane. Jeśli już chcemy wszystko zautomatyzować to poprostu każdy obiekt w naszym frameworku traktujemy jako Core_Object i po krzyku. Takie coś:


Nie obrażając nikogo, ale nie masz pojęcia o programowaniu obiektowym... Co ma np. wspólnego klasa DB (np. PDO) z klasą powiedzmy Kota? Używając dziedziczenia (Kot dziedziczy po DB), dajesz do zrozumienia, że klasa kota jest klasą rozszerzającą mozliwosci klasy DB, co jest nieprawdą.
Do tego pozwalasz używać klasę Kota tak, jakby to była klasa DB... I teraz prosty przykład:

  1. <?php
  2. if ($kot instanceof $db)
  3.  echo "to jest klasa db";
  4. ?>


Trochę to dziwne? Rozumiem, że kot może być klasą pochodną klasy Zwierzak, a ten z kolei klasy Ssak, ale nie WTC na miłość boską, chociaz nikt Ci tego nie zabroni (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Przepraszam za takie łopatologiczne przykłady, ale nie umiem tłumaczyć. Najlepiej zacząć rozpisywać to w UML, wtedy ujrzysz, że to nie ma sensu. Każdy początkujący programista próbuje wyprowadzać z klasy np. MySQL następne klasy (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował markac 4.12.2008, 18:54:05
Go to the top of the page
+Quote Post

Posty w temacie
- Jawor   PDO i współpraca z własnymi klasami   9.11.2008, 16:26:41
- - LBO   Przekazuj obiekt PDO i wykorzystuj go w klasach sł...   9.11.2008, 16:37:47
- - Jawor   Cytat(LBO @ 9.11.2008, 18:37:47 ) S...   9.11.2008, 16:40:46
|- - Maciekbjw   Cytat(Jawor @ 9.11.2008, 16:40:46 ) R...   23.11.2008, 00:20:40
- - LBO   Cytat(Jawor @ 9.11.2008, 16:40:46 ) R...   9.11.2008, 16:47:15
- - Jawor   Ok. Dzieki za pomoc. Pozdrawiam   9.11.2008, 16:51:35
- - Black-Berry   Z ostatnich testów i odrobiony teoretyzowania wysz...   9.11.2008, 17:31:14
- - LBO   Prędzej [PHP] pobierz, plaintext <?php$context...   9.11.2008, 17:35:59
- - Black-Berry   A nie tak: [PHP] pobierz, plaintext <?php$conte...   9.11.2008, 17:43:27
- - LBO   Ja za stopkę aplikacji uważam na przykład ostatni ...   9.11.2008, 17:50:47
- - Black-Berry   Racja. Twoje rozwiązanie jest bardziej eleganckie....   9.11.2008, 17:57:49
- - markac   Dajcie już spokój z tymi kontekstami i kopiowaniem...   9.11.2008, 20:15:48
- - LBO   Rejestr to tylko niechlujność architektó...   9.11.2008, 20:21:05
- - Black-Berry   Singletony są złe. A poza tym działają wolniej niż...   10.11.2008, 09:45:02
- - phpion   @BlackBerry: A czy przypadkiem nie jest tak, że co...   10.11.2008, 09:48:23
- - LBO   No i w tym momencie masz z poziomu szablonu dost...   10.11.2008, 09:51:13
- - markac   Tak się składa, że obiekt bazy danych ma być dostę...   10.11.2008, 11:20:28
- - Black-Berry   Dlaczego na miłość Boga kontekst miałby być single...   10.11.2008, 11:23:43
- - LBO   Kto Ci powiedział, że obiekt kontekstu ma być wszę...   10.11.2008, 11:37:02
|- - markac   Cytat(LBO @ 10.11.2008, 11:37:02 ) Kt...   22.11.2008, 18:17:09
- - xmarcin   troche odgrzewam temat, ale przyznam, że cos mnie ...   22.11.2008, 16:26:45
- - LBO   Tak też można, jeżeli nie chcesz by...   22.11.2008, 17:12:06
|- - xmarcin   Cytat(LBO @ 22.11.2008, 17:12:06 ) Ta...   23.11.2008, 12:02:54
- - LBO   Cytat(markac @ 22.11.2008, 18:17:09 )...   22.11.2008, 19:05:02
- - wlamywacz   Dołączę się do tematu. Jak napisać obsługę DB tak ...   22.11.2008, 22:37:05
- - Mize   Przeczytaj cały wątek i potem swój kod. ...   23.11.2008, 00:34:31
- - Mize   To co Ci będzie potrzebne ? Skąd mamy wiedzieć co ...   24.11.2008, 14:10:57
- - xmarcin   fakt... troche nie sprecyzowalem... juz nie bede d...   24.11.2008, 23:31:24
- - wrzasq   Ot, i najlepiej jeszcze podciągnijcie pod to walkę...   28.11.2008, 04:50:52
- - Black-Berry   @wrzasq Zgadzam się z tobą. Co byś nei zrobił zaws...   28.11.2008, 17:09:42
- - orglee   Troszkę się zastanawiałem nad tą dyskusją i najpie...   3.12.2008, 03:06:31
- - dr_bonzo   [PHP] pobierz, plaintext <?php// Załaduj plik k...   3.12.2008, 03:24:30
- - orglee   Tak coś właśnie czułem że...   3.12.2008, 03:32:35
- - dr_bonzo   CytatChyba zapamiętasz rozmieszczenie katalogów, p...   3.12.2008, 03:50:18
- - orglee   Heh. Edytowałem post przy użyciu szybkie...   3.12.2008, 04:13:43
- - markac   Sorry orglee, ale ja już wolę __autoload. W system...   3.12.2008, 09:23:38
|- - orglee   Cytat(markac @ 3.12.2008, 09:23:38 ) ...   3.12.2008, 16:52:57
|- - markac   Cytat(orglee @ 3.12.2008, 16:52:57 ) ...   3.12.2008, 17:11:47
|- - Black-Berry   Cytat(orglee @ 3.12.2008, 16:52:57 ) ...   4.12.2008, 14:49:57
|- - markac   Cytat(Black-Berry @ 4.12.2008, 14:49...   4.12.2008, 18:52:32
|- - markac   Cytat(Black-Berry @ 4.12.2008, 14:49...   4.12.2008, 20:30:44
- - dr_bonzo   @orgle: ZS ma, eclipse nie ma, mi wystarczy jak na...   3.12.2008, 10:29:37
|- - mike   Cytat(dr_bonzo @ 3.12.2008, 10:29:37 ...   3.12.2008, 10:48:36
- - orglee   Uhh ależ mi dopiekłeś. Programuje w...   3.12.2008, 20:22:00
- - erix   CytatMoże i jest pomysłowe ale czy istni...   4.12.2008, 17:50:17
- - Black-Berry   Tak ale tam jest to rozwiązanie wbudowane a nie pa...   4.12.2008, 17:58:18
- - LBO   Klasyczny problem CytatTelefonistka dziedziczy po ...   4.12.2008, 20:04:03
- - Black-Berry   @markac Ja nie mam pojęcia o programowaniu obiekto...   4.12.2008, 20:06:14
- - Black-Berry   Tak, sory literówka. Dalej pisałem o Core_Object. ...   4.12.2008, 20:34:20
- - dr_bonzo   @mike CytatCytat@orgle: ZS ma, eclipse nie ma, (....   4.12.2008, 20:35:22
- - LBO   Cytat(Black-Berry @ 4.12.2008, 20:06...   4.12.2008, 20:40:57
- - Black-Berry   @LBO No tak, zgadzam się. Ja cały czas o czymś tak...   4.12.2008, 20:50:49


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

 



RSS Aktualny czas: 30.12.2025 - 21:11