Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF] Prefix tabel
misiek08
post 18.06.2010, 21:49:14
Post #1





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

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


Witam!
Nie jestem tak mocno "obkuty" w obiektowym programowaniu, a widzę (wg mnie wykonalny) prosty sposób na możliwość ustawienia prefix'u table w ZF.
Kod przykładowego modelu wygląda tak:
  1. <?php
  2. class Album extends Zend_Db_Table {
  3. protected $_name = 'kategorie';
  4. }


Wiem, że abstract pozwala rozbudować klasę (ja to tak rozumiem). Tak więc, czy nie można zrobić czegoś takiego np. w Bootstrap.php:
  1. abstract class Zend_DB_Table {
  2. protected function _setupTableName (){
  3. $this->_name = TABLE_PREFIX . $this->_name;
  4. }
  5. }


Ten post edytował misiek08 18.06.2010, 21:52:44
Go to the top of the page
+Quote Post
yevaud
post 18.06.2010, 23:14:55
Post #2





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

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


fajnie byloby ten prefix z configa pobierac winksmiley.jpg
Go to the top of the page
+Quote Post
misiek08
post 19.06.2010, 09:39:18
Post #3





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

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


W pliku Bootstrap definiuję TABLE_PREFIX. Chodzi mi czy taka konstrukcja działa. Nie mam niestety jak jej przetestować, bo dopiero jutro będę miał dane FTP do strony. Nie używałem wcześniej abstract'a.


EDIT:
Z tego co szukałem w internecie widzę, że abstract służy do czegoś innego. Moim problemem jest chęć nadpisania metody _setupTableName z klasy Zend_DB_Table tak, aby każdy obiekt tej klasy miał automatycznie dodawany prefix do nazwy.

Ten post edytował misiek08 19.06.2010, 12:00:13
Go to the top of the page
+Quote Post
yevaud
post 19.06.2010, 12:26:45
Post #4





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

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


abstract uzywasz wtedy gdy chcesz "zamarkowac", ze dana klasa ma miec jakas konkretna metode, ale nie mozesz jeszcze napisac jej kodu

np.

  1. abstract class AbstractClass
  2. {
  3. abstract protected function costam();
  4. }


kazda klasa ktora ma chociaz jedna metode abstrakcyjna, musi byc abstrakcyjna - wynika tez z tego ze jesli dziedziczysz po klasie abstrakcyjnej i nie pokryjesz jej abstrakcynych metod, to wlasnie tworzysz nastepna klase abstrakcyjna smile.gif
oczywiscie nie mozesz tworzyc obiektow klasy abstrakcyjnej winksmiley.jpg poniewaz maja one metody ktore nie maja implementacji wiec nie moga sie wykonac smile.gif

klasy abstrakcyjne maja sens wtedy gdy tworzysz klasy dziedziczace po nich, wtedy:
1. narzucasz ze pewne metody musza miec implementacje, jesli ktos chce tworzyc normalne obiekty
2. dzieki temu ze interpreter wie, ze AbstractClass ma jakas metode, mozesz uzywajac polimorfozmu traktowac klasy dziedziczace po AbstractClass, jak instancja obiektu AbstractClass i wtedy odwolywac sie normalnie do jej metod abstrakcyjnych

http://php.net/manual/en/language.oop5.abstract.php

Ten post edytował yevaud 19.06.2010, 12:28:06
Go to the top of the page
+Quote Post
misiek08
post 19.06.2010, 12:28:33
Post #5





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

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


A na mój problem jakie lekarstwo? Po prostu chciałbym zmodyfikować istniejąca klasę, ale bez ingerowania w jej oryginalny kod.
Go to the top of the page
+Quote Post
yevaud
post 19.06.2010, 12:30:56
Post #6





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

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


Twoja technika ma sens jesli zrobisz sobie klase ktora dziedziczy po Zend_DB_Table i nazywa sie np. "Misiek_Db_Table", dodaje tam co trzeba, a Ty dziedziczysz swoimi tabelami po Misiek_Db_Table
Go to the top of the page
+Quote Post
misiek08
post 19.06.2010, 13:17:35
Post #7





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

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


Czyli:
  1. class Misiek_Db_table extends Zend_Db_Table {
  2. protected function setupTableName(){
  3. $this->_name = TABLE_PREFIX . $this->_name;
  4. }
  5. }
  6. class Album extends Misiek_Db_Table {
  7. protected $_name = 'test';
  8. }

Oczywiście dodam wcześniej w mojej funkcji kod starego setupTableName.
Go to the top of the page
+Quote Post
yevaud
post 19.06.2010, 13:23:34
Post #8





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

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


dorzuc uruchomienie rodzica w setupTableName
  1. class Misiek_Db_table extends Zend_Db_Table {
  2. protected function _setupTableName(){
  3. parent::_setupTableName();
  4. $this->_name = TABLE_PREFIX . $this->_name;
  5. }
  6. }
  7.  
  8. class Album extends Misiek_Db_Table {
  9. protected $_name = 'test';
  10. }


Ten post edytował yevaud 19.06.2010, 13:24:03
Go to the top of the page
+Quote Post
misiek08
post 19.06.2010, 13:31:02
Post #9





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

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


Czyli wtedy już nie muszę przpisywać kodu ze starej setupTableName? Chodzi o kod który rozbija ewentualnie nazwe bazy, i który na podstawie nazwy klasy tworzy nazwę tabeli jeśli nie została podana?
Go to the top of the page
+Quote Post
yevaud
post 19.06.2010, 13:41:50
Post #10





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

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


nie musisz
Go to the top of the page
+Quote Post
misiek08
post 19.06.2010, 13:43:47
Post #11





Grupa: Zarejestrowani
Postów: 91
Pomógł: 6
Dołączył: 2.02.2008

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


Dziękuję za tak kompleksową pomoc w sobotę. Dałem pomógł oczywiście. Można (chyba) zamknąć.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2025 - 02:00