Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF]Problem w klasie ZEND_DB
Forum PHP.pl > Forum > PHP > Frameworki
webmaster1989
Witam .Mam problem .Otóż analizuje sobie niektóre klasy w ZendFramowork .Jak naradzie wszystko rozumiałem choć od niedawna uczyłem się obiektówki.Dla przykładu funkcja "query" (w klasie zend_db_adapter_abstract) odpala mi metode connect -kod :$this->_connect();
A w metoda _connect wygląda tak: abstract protected function _connect();
A w niej nic niema.To po co ten kod?jak niema rozszerzenia klasy akurat w tym kodzie.Poprostu nierozumiem o co tu biega.
Rozumiem gdybym dla przykładu zrobił tak:
$db2=new zend_db_adapter_db2;
$db2->connect();
to by mi się właczyła metoda dziedzicznej klasy db2.
Ale w tym kodzie jest this->connect().A z tego co wiem nie można wywoływać metody abstrakcyjnej .nie rozumiem tego kodu.
Wiem że klasy które rozszerzają metode abstract protected function _connect(); są w folderze zend/db/adapter
tylko nie wiem która akurat jest włączana w $this->connect.
Proszę o pomoc.
R4D3K
Cytat
Jak naradzie wszystko rozumiałem choć od niedawna uczyłem się obiektówki.

To trochę się nie douczyłeś ....
Wiesz obczajanie frameworka dla kogoś kto dopiero "obczaja obiektówkę" jest ja kazanie 1 klasiście pisać egzamin maturalny i to rozszerzony.

Cytat
(w klasie zend_db_adapter_abstract) odpala mi metode connect -kod :$this->_connect(); [...]
A w niej nic niema.To po co ten kod?

Poczytaj o klasach abstrakcyjnych, lub o tak zwanych wzorcach projektowych i dowiesz się jak ze sobą "łączyć" klasy, żeby powstała aplikacja.
Ale najpierw polecam zapoznanie Ci się z 3 filarami obiektowości.
VegetaSSJ
Kolego @webmaster1989 nie przejmuj się postem kolegi @R4D3K. Ten już najwyraźniej pozjadał wszystkie rozumy i nic wartościowego poza wytknięciem ci braku wiedzy do tematu wnieść nie może.

Sprawa z klasami abstrakcyjnymi wygląda tak że nie możesz utworzyć instancji obiektu z takiej klasy. W prostym przekładzie nie możesz zrobić tak: $adapter = new Zend_Db_Adapter_Abstract(). Jeżeli chcesz korzystać z takiej klasy musisz napisać własną klasę która dziedziczy po Zend_Db_Adapter_Abstract, ewentualnie skorzystać z jednej z dostępnych już klas w ZF.

Tak więc metoda connect która cię interesuje znajduje się rzeczywiście w innej klasie. Np masz klasę Zend_Db_Adapter_Pdo_Mysql do połączeń PDO z Mysql. Klasa ta dziedziczy pośrednio z Zend_Db_Adapter_Abstract, pośrednio bo między nimi jest jeszcze Zend_Db_Adapter_Pdo_Abstract. Jak się przyjrzysz to zobaczysz Zend_Db_Adapter_Pdo_Mysql jest metoda _connect() która implementuje jakąś tam logikę, a następnie wywołuje parent::_connect(), czyli metodę o takiej samej nazwie na obiekcie rodzica - Zend_Db_Adapter_Pdo_Mysql gdzie już masz konkretny kod łączący z bazą danych.

To by było na tyle, i pamiętaj że kto pyta nie błądzi raz że nie ma głupich pytań - są za to głupie odpowiedzi (@R4D3K).
webmaster1989
aha.No dobra .tylko nadal jednego nie rozumiem.Dlaczego akurat mi się włącza metoda connect w Zend_Db_Adapter_Pdo_Mysql .Skoro także mam connect w klasie Zend_Db_Adapter_Pdo_Pgsql która także dziedziczy pośrednio z Zend_Db_Adapter_Abstract. a w kodzie jest this->connect .czyli nie wiadomo jaka klasa.I tego nie rozumiem.Proszę o wytłumaczenie z góry dziękuje
luki100011
Tak ogólnie :

Bo zależy jaka klasa łączy się z bazą gdzieś definiujesz czy łączysz się przez pdo_mysql czy pdo_pgsql i wtedy startuje albo
Zend_Db_Adapter_Pdo_Pgsql
albo
Zend_Db_Adapter_Pdo_Mysql

które dziedziczą po klasach abstrakcyjnych
R4D3K
Cytat
Ten już najwyraźniej pozjadał wszystkie rozumy i nic wartościowego poza wytknięciem ci braku wiedzy do tematu wnieść nie może

Akurat nie zładem i sam jeszcze dużo nie wiem, ale bez przesady to jest prawie że elementarna wiedza, o której można przeczytać długie artykuły i prawie wszystkie książki i ebooki o tym bębnią i jest to lepiej i dokładniej wytłumaczone niż ty to opisałeś w paru linijkach, natomiast nic nie wspomniałeś o wzorcu projektowym adapter, o który podejrzewam mu chodziło , tylko nie wiedział ja to nazwać.

Nie będę tu się o nim rozpisywał, ponieważ wpisując na google hasło: "wzorzec adapter" znajdzie
Cytat
Około 19,000 wyników (0,18 s)
I uważam że nie ma sensu tu kopiować tych tekstów, a wyjaśnienie w 2 - 3 zdaniach o co tutaj chodzi dla kogoś , kto dopiero "obczaja obiektówkę" podejrzewam że, nie przyniesie takiego skutku jak zapoznania się chodziarz z jednym z artykułów.

Jeśli chodzi o mnie to ja polecam koledze webmaster1989 zapoznania się z jakaś książką na temat programowania obiektowego w PHP, gdzie na przykład i z dokładnym wyjaśnieniem na pewno dowie się na temat upragnionej klasy abstrakcyjnej, jak i wieli innych pożytecznych rzeczy.
Gdy dalej zechcesz zdobywać wiedzę w zakresie inżynierii programowania to polecam słynną książkę "Bandy Czworga", gdzie znajdziesz istną kopalnie wiedzy na temat wzorców projektowych wraz z przykładami ich użycia.

VegetaSSJ
Słynna książka o której piszesz moim zdaniem nadaje się dla ludzi którzy już jakieś doświadczenie maja. Doświadczenie zbiera się siedząc i analizując kod - praktyka w programowaniu jest niezastąpiona. Kolega ma bardzo dobre podejście, nie ma podstaw ale rzuca się na głęboką wodę - dzięki temu szybciej się nauczy pływać (chyba że się zniechęci). Książki takie jak ta którą polecasz są fajne kiedy napotykasz jakiś ciekawy fragment kodu - analizujesz go i zyskujesz podstawowe wyobrażenie jak to działa - wtedy dobrze jest zajrzeć do książki która rozszerzy Twoją wiedzę i rozjaśni to czego nie zrozumiałeś.

Czytanie o wzorcu nie macając jego kodu jest bez sensu.
webmaster1989
już kumam o co chodzi z tym adapterem.
Sama nazwa mówi.Dopiero się ucze ,jestem nowicjuszem.Mam nadzieje że kiedyś będzie inaczej.Przede mną jeszcze bardzo dużo nauki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.