![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam serdecznie!
Od jakiegoś czasu próbuję opanować OOP w PHP i idzie mi, nie przymierzając, słabo. Mój problem polega na tym, że nie potrafię z jednej klasy odwołać się do metod innej. Nie wiem, czy to nie jest przypadkiem durnota jakaś i mój błąd w próbie myślenia obiektowo... proszę o pomoc w każdym bądź razie. Mam klasę MySqlEng(). Konstruktor tej klasy tworzy połączenie z bazą danych i zapisuje uchwyt połączenia w prywatnej zmiennej klasy. Dalej mam 4 metody: selectQuery, updateQuery, insertQuery i deleteQuery, które przygotowują w prywatnej zmiennej $query string, który metodzie doQuery() służy do wykonania odpowiedniego zapytania w bazie danych. Dochodzi jeszcze metoda fetchResults(), która pozwala na przewijanie rekordów uzyskanych w odpowiedzi na zapytanie. Standardowo używam tej klasy tak:
Próbuję teraz złożyć klasę pagesSupport(), której zadaniem będzie: dodawanie stron do bazy danych, ich edycja i zmiana, oraz wyciągnie z bazy danych o odpowiedniej podstronie i wyswietlanie jej na ekranie. Zwykłe użycie wewnątrz metody tej klasy metody $sql->selectQuery() wywołuje błąd... Jak skorzystać z klasy MySqlEng() wewnątrz klasy pagesSupport()(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Podaję też kod klasy MySqlEng():
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Albo przekazujesz obiekt klasy MysqlEng do obiektu klasy pagesSupport poprzez argument jakiejś metody/konstruktora:
A w konstruktorze bądź innej metodzie:
Albo korzystając z Singletonu, Rejestru czy jeszcze czegos innego, byle nie globali. EDIT: I to o co pytasz to obiekt wewnątrz obiektu. PHP nie umożliwia zapiania klasy w klasie (nested classes). Ten post edytował Crozin 28.12.2008, 13:08:43 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 12 Dołączył: 28.06.2007 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
takie rzeczy to tylko w javie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) A szkoda.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
To o czym pisze kolega Crozin to tak zwane inversion of control.
TDzieki temu możesz uczynić kod bardziej uniwersalnym.
a potem:
lub
I dzięki temu możesz w pewnym ograniczonym stopniu zmieniać bazę bez ingerencji w kod. Jak widzisz użyłem metody (tzw setter), żeby przekazać klasę odpowiedzialną za zapytania na bazie danych. Jest to wygodniejsze od parametru w konstruktorze. Albo korzystając z Singletonu, Rejestru czy jeszcze czegos innego, byle nie globali. A powiedz czym się różni w użytkowaniu taki Rejestr od globali, prócz ujęcia w OOP? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%) ![]() ![]() |
Cytat A powiedz czym się różni w użytkowaniu taki Rejestr od globali, prócz ujęcia w OOP? Różni się tym że nie możesz go nadpisać, raz ustalony i tak zostaje do końca. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Różni się tym że nie możesz go nadpisać, raz ustalony i tak zostaje do końca. Nie rozumiem. Chodzi Tobie o to, że nie można nadpisać obiektów, które trzyma? Bo jak tak to muszę Ciebie zmartwić - powszechne implementacje nie biorą Tego pod uwagę (patrz Zend_Registry) i szczerze mówiąc takie podejście nie wynika jakoś jasno z założen tego wzorca. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%) ![]() ![]() |
Każdy dostosowuje wzorzec do swoich potrzeb, nie są one sztywno ustalone.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Każdy dostosowuje wzorzec do swoich potrzeb, nie są one sztywno ustalone. 1. Tym bardziej nie możesz tego używać jako argumentu. 2. Taki sposób nie jest zbyt wygodny wbrew pozorom. Zakładam, że nie robisz testów jednostkowych. 3. Cytat [...] szczerze mówiąc takie podejście nie wynika jakoś jasno z założen tego wzorca.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 12 Dołączył: 9.10.2008 Skąd: Tricity.Rumia() Ostrzeżenie: (0%) ![]() ![]() |
... nie potrafię z jednej klasy odwołać się do metod innej. No niestety tak się czasem zdarza, że w schemacie klas są pomiędzy nimi strzałki :] I wtedy tak jak koledzy pokazali przekazujemy referencję do obiektu w konstruktorze lub innej meodzie importującej ( nie jest to oczywiście jedyne rozwiązanie ale jest najlepsze) Co do rejestru ... chciałem tylko powiedzieć, że w zasadzie nie różni się od globali ale czy BD różni się od globali ? Nie - no właśnie dlatego tworzymy warstwę danych aby wszystko co z nimi związane było "gdzieś" a nie wszędzie :] @plurr oprócz Javy na świecie jest jeszcze jeden język: C# (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) BTW PHP nie jest OO :[ |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 206 Pomógł: 18 Dołączył: 6.03.2006 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
@pinochet: jest wiele języków, a nested classes to nawet w C++ istnieją (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . taki offtopic mały jak już chcemy uściślać (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) .
|
|
|
![]()
Post
#11
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
językiem zorientowanym obiektowo / językiem obiektowym. To ja też Ciebie zmartwię - nie ma czegoś takiego jak język zorientowany obiektowo (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#13
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
To ja też Ciebie zmartwię - nie ma czegoś takiego jak język zorientowany obiektowo (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) (IMG:http://forum.php.pl/style_emoticons/default/worriedsmiley.gif) jak to w takim razie jest? Mnie na uczelni uczono właśnie takiego rozgraniczenia. // Edit: Język zorientowany obiektowo - umożliwia pisanie kodu zarówno stukturalnie jak i obiektowo. Język obiektowy - umożliwia pisanie kodu tylko obiektowo. Tak mnie uczono... Ten post edytował phpion 3.01.2009, 18:37:49 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
OO to jest paradygmat... natomiast języki mogą mieć typy np. obiektowy język albo język z elementami tegoż (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
edit: Chcę tylko udowodnić, że nie warto się czepiać takich rzeczy - bo to normalne, że w naszym środowisku z czasem zaczynamy operować skrótami myślowymi. Co złego to nie ja (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Alan Ten post edytował LBO 3.01.2009, 18:42:58 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Wielki dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Przepraszam, że tu nie zaglądałem, ciężki okres ostatnio w pracy miałem. Serdecznie pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.09.2025 - 13:26 |