![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Czy we wnątrz klasy mogę użyć zewnętrzny obiekt bez konieczności używania deklaracji public ?
-------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Może dziedziczenie?
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
nie ma innego sposobu ?
-------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#4
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
no tak ale wtedy za kazdym razem bede musiał tworzyc nowy obiekt a to mi ma ułatwić sprawę
![]() -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#6
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Możesz jeszcze przekazywać obiekt do metody.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 240 Pomógł: 13 Dołączył: 1.06.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Czy we wnątrz klasy mogę użyć zewnętrzny obiekt bez konieczności używania deklaracji public ?
A co złego w tym:
-------------------- Good programming is 99% sweat and 1% coffee.
Make it idiot proof and someone will make a better idiot... |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@LonelyKnight MAsz u mnie piwo:)
-------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#9
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Dodam że singleton jest porównywany z globalami tylko w ładniejszym opakowaniu.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
po prostu napisz sobie jakiś obiekt podstawowy, który wszystkie inne klasy będą rozszerzać.
i w następnych klasach nie będzie problemów:
Ten post edytował em1X 13.02.2008, 12:13:07 -------------------- eh, co polska wódka to polska wódka
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@webdicepl Tak sobie myślę... że skoro różnica ma polegać tylko na opakowaniu to już chyba zostanę przy "globalach" i przy kazdym wywołaniu $db dopiszę sobie to global. Nie chcę za dużo komplikować.
-------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#12
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Tak jak Ci mówiłem, tu najlepszym rozwiązaniem będzie dziedziczenie. I tak w metodach używasz funkcji z klasy DB, więc będzie ona nierozłączną częścią Twoich klas.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
@webdicepl Tak sobie myślę... że skoro różnica ma polegać tylko na opakowaniu to już chyba zostanę przy "globalach" i przy kazdym wywołaniu $db dopiszę sobie to global. Nie chcę za dużo komplikować. Używanie globali jest bardzo nieeleganckie, bardzo niepraktyczne i świadczy o niskim poziomie programisty ![]() -------------------- eh, co polska wódka to polska wódka
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem, W takim razie zrobię tak jak sugerujesz. Obiekt główny i dziedziczące po nim wszystkie inne. To lepszy sposób niż SINGLETON ? Jak uważacie. Zależy mi na dobrym profesjonalnym i przyszłościowym rozwiązaniu, tak żebym mógł pozniej do sterownika bazy dopisać np cache.
-------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
Zauważ, że jeżeli będziesz chciał wprowadzić jakieś modyfikacje do sterownika bazy danych to zrobisz to zupełnie niezależnie od systemu.
Myślę, że rozsądnie jest użyć Singletona w przypadku obsługi bazy danych. Masz wtedy pełną kontrolę nad tym połączeniem z bazą. Ale też (w przypadku innych klas) z nim nie przesadzaj, ostatnio jakaś taka dziwna moda jest na walenie tego Singletona w każdą klasę, gdzie popadnie, a przecież przeważnie ten Singleton wcale nie jest w niej potrzebny. A więc z głową wszystko, z głową ![]() ps. siedzisz dalej w PHP4 ? Ten post edytował em1X 13.02.2008, 16:49:51 -------------------- eh, co polska wódka to polska wódka
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Tak, jakoś tak wyszło, że zaczynałem w PHP4 i się go trzymam. Wiem, że wychodzi już z użycia i nie ma sensu tego ciągnąć, a co do pełnej obiektowości to trochę ona do mnie nie przemawia. Wiem, ze teraz moda na obiekty i wogóle ale kiedy to wszystko się zaczynało to klasa znaczyła grupę obiektów i nikt nie budował całej klasy dla tylko jednego obiektu. Moim zdaniem to trochę nadużycie ale pewnie nie idę z duchem czasu... ale nie o tym:
Przyszło mi do głowy jeszcze jedno rozwiązanie. Co o nim myślicie?
Ten post edytował Black-Berry 13.02.2008, 21:04:50 -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
1) Bez sensu.... i skończ z tym globalem w końcu
![]() 2) Napisałem Ci jak poprawniej to powinno wyglądać: http://forum.php.pl/index.php?showtopic=87...rt=#entry441695 Możesz sobie tylko zamienić metodę getDB() na np. query(), która będzie wykonywać zapytania SQL. 3) Poczytaj jak wyglądają klasy w PHP5. Stwarzają masę nowych możliwości. Ludzie jeżdzą samochodami, a Ty dalej razem z Flinstonami na kwadratowych kołach jedziesz ![]() 4) przykład:
Ten post edytował em1X 14.02.2008, 12:23:06 -------------------- eh, co polska wódka to polska wódka
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
![]() ![]() 4 godziny później... Zrobiłem to według schematu. Wszystko działa jak należy:) Jesteś dziś moim bogiem ![]() i jeszcze... Tak apropo globalsów ![]()
Ten post edytował Black-Berry 14.02.2008, 01:16:02 -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 2 Dołączył: 27.03.2007 Skąd: Sufczyn Ostrzeżenie: (0%) ![]() ![]() |
Lepiej by było jakby te db_host, db_user i password były stałymi. Nie miałbyś problemy z ich dostępnąścią w klasach, bo stałe mają widoczność globalną.
|
|
|
![]()
Post
#20
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Może tak jednak nie globale i stałe, a jakiś obiekt konfiguracji?
-------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#21
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Taki obiekt konfiguracyjny były również singletonem prawda? Podobnie jak driver bazy danych ?
-------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#22
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
To już od Ciebie zależy. Może być sigletonem, ale nie musi
-------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#23
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 12 Dołączył: 6.01.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Ja w tym celu tworzę sobie obiekt globalny w tablicy GLOBALS i w celu skrócenia kodu odwołuję się do niego przez funkcję (nie będącą w żadnej klasie):
Jeżeli zależy nam na singletonie to można oczywiście zastosować zwykły singleton i dopisać sobie taką funkcję:
Idea polega na tym aby skrócić kod odwołania. Prościej i szybciej jest używać sql()->query() niż Sql::getInstance()->query(); Jeżeli chodzi o tworzenie obiektu nadrzędnego, po którym będą dziedziczyły wszystkie inne to nie polecam tego rozwiązania. W pewnym sensie zmusza ono programistę do dziedziczenia po tej klasie co może czasami okazać się niewygodne. |
|
|
![]()
Post
#24
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
no to teraz mi już namieszałeś totalnie
![]() Przy okazji nasuwa mi się pytanie. Skoro znacznik global ma zostać usunięty z PHP w przyszłości to jak to się ma do tablicy $GLOBALS? tez ma zostać usunięta ? -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#25
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
No pewnie, że namieszał.
Jeżeli chcesz przechowywać dane konfiguracyjne to zapoznaj się ze wzorcem Registry. Jeżeli chcesz skrócić sobie notację, możesz utworzyć metodę-osłonkę w swojej klasie:
Ten post edytował em1X 17.02.2008, 12:49:50 -------------------- eh, co polska wódka to polska wódka
|
|
|
![]()
Post
#26
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@em1X tego typu osłonka sprawdza się świetnie. Wielkie dzięki za sugestie. @Cotter Za pomysł ze skróceniem notacji też dziękuję. Wydaje mi się jednak, że obiekt po którym dziedziczą wszystkie inne obiekty to dobry pomysł bo mogę sobie podpinać wtyczki do całego systemu w bardzo wygodny sposób. O to co udało mi się sklecić. Proszę o komentarze.
Ten post edytował Black-Berry 17.02.2008, 15:38:05 -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#27
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
1) dużo lepiej niż było na początku
![]() Trzeba pisać, pisać i pisać.. wszystko opiera się na doświadczeniu. 2) proponuję kupić sobie tą książkę. Na pewno Ci się przyda, bo wszystko u czym tutaj pobieżnie pisaliśmy, w tej książce jest opisane od podstaw, zaczynając od wzorców projektowych i ciekawych metod programowania obiektowego. -------------------- eh, co polska wódka to polska wódka
|
|
|
![]()
Post
#28
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
boje się że mi życia na naukę braknie
![]() Pozdrawiam. Ten post edytował Black-Berry 17.02.2008, 17:01:24 -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.06.2025 - 13:56 |