![]() |
![]() ![]() |
![]() |
--marcin-- |
![]()
Post
#1
|
Goście ![]() |
Prosze o porade bardziej doswiadczonych. Czy istnieje jakis prosty sposob na wstrzykiwanie do kazdego nowo stworzonego obiektu innego? Chodzi mi o to ze po utworzeniu polaczenia z baza (pdo) chcialbym ten obiekt miec dostepny w kazdym innym obiekcie.
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 550 Pomógł: 75 Dołączył: 5.06.2012 Skąd: Lębork Ostrzeżenie: (0%) ![]() ![]() |
Tak. Są takie pola i metody jak statyczne. Wystarczy troszkę więcej poczytać o OOP jak już się za nie zabierasz. (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli mowa o połaczeniu z PDO w każdej klasie, to
pdo.php
albo poczytać o autoload Ten post edytował Turson 30.01.2014, 09:56:11 |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
@Turson no nie ucz ludzi zly nawykow.... nie po to wymyslono dziedziczenie, by wszystko dziedziczylo po obiekcie polączenia. O tym, ze kazdy obiekt na nowo tworzyc bedzie nowe połączenie to juz nawet nie wspominam, bo wstyd na potege (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Więc jak byś rozwiązał sprawę połączenia, by było dostępne w każdym obiekcie?
|
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Normalnie, na wiele sposobow:
1) Obiekt polaczenia przekazywany do konstruktora 2) Singleton - ponoc tego nie polecaja bo cos tam. 3) Registry - tego tez ponoc nie polecają bo cos tam (IMG:style_emoticons/default/wink.gif) Ogolnie zasada jest balanie prosta: w calej aplikacji tworzysz jeden obiekt polaczenia i na nim operujesz. Tworzenie kilku obiektow połączenia a co za tym idzie kolejnych połączen w jednym request jest delikatnie rzecz mowiac nieoptymalne. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Nawiązując do 2 ostatnich zdań, w moim kodzie nie tworzę kilku obiektów połączenia, a jeden "Connect", który mogę podpinać pod inne obiekty.
|
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
class Test extends Connect - a czy tutaj przypadkiem nie zostanie wywołany Connect::__construct(), który utworzy nowy obiekt? Mógłbyś to obejść deklarując składową $db jako statyczną. Ale fakt - dziedziczenie tylko po to by mieć dostęp do połączenia z bazą jest bez sensu.
|
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Poza tym, abstrahując od tego co napisał nospor, można zamiast dziedziczenia użyć traitów. Moim zdaniem też będzie wygodniejsze do późniejszego rozwijania.
|
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat w moim kodzie nie tworzę kilku obiektów połączenia, a jeden "Connect", który mogę podpinać pod inne obiekty. Chyba ominales ten rozdzial, w ktorym pisano jak dziala dziedziczenie (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Zawsze można użyć IoC, taka moda w PHP. Pasuje to do tego języka jak kurczak do parówek ale cóż.
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ogolnie zasada jest balanie prosta: w calej aplikacji tworzysz jeden obiekt polaczenia i na nim operujesz. Pokazałbyś pseudokod działania? |
|
|
--marcin-- |
![]()
Post
#13
|
Goście ![]() |
Czyli najlepsza metoda to przekazanie obiektu w konstruktorze lub jak podal thek - traits, czy jest jakas zasadnicza roznica miedzy nimi oprocz tej ze traits jest od php5.4 ? bo przyznam, ze o traits dopiero teraz sie dowiedzialem (IMG:style_emoticons/default/facepalmxd.gif)
|
|
|
![]()
Post
#14
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Tu kod apropo dziedziczenia dla lepszej wizualizacji
Cytat Pokazałbyś pseudokod działania? $db = new DB(); //gdzies tam w aplikacji tworzysz sobie taki obiekt $obiekt = new JakisObiekt($db); //gdzies tam indziej przekazujesz obiekt $db do aktualnie tworzonego obiektu. Oczywiscie konstruktor musi go odebrac. Pomijam tu juz kwestie widocznosci zmiennej $db. To juz zupelnie inna bajka. Ja osobiscie uzywam Rejestrow i jest mi z tym dobrze. Wszedzie tam gdzie potrzebuje to poprostu siegam po utworzony juz obiekt, ktory jest w Rejestrze. Dodatkowo zrobilem "leniwe połączenie" czyli połączenie z bazą tworze dopiero wtedy, gdy obiekt bazy chce wykonac zapytanie, a nie w momencie tworzenia obiektu bazy. Dzieki temu, nawet pomimo faktu, ze obiekt bazy tworze na samym poczatku aplikaji, to połączenie z bazą nawiązuje dopiero wtedy gdy potrzeba, albo w ogole, jesli nie bylo takiej potrzeby |
|
|
--marcin-- |
![]()
Post
#15
|
Goście ![]() |
nospor - zakladajac, ze i tak kazde 'odswiezenie' strony bedzie korzystac z bazy jaka przewage daje polaczenie leniwe nad zwyklym przy tworzeniu obiektu?
mozesz rozwinac lub dac linka cos na temat tych rejestrow? |
|
|
![]()
Post
#16
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
W moim systemie twoje zalozenie jest bledne, wiec stosuje leniwe polaczenia. Po cos przeciez wymyslono cache (IMG:style_emoticons/default/wink.gif)
Jesli jednak faktycznie, twoja aplikacja za kazdym razem musi korzystac z bazy, to leniwe połączenia nie mają raczej sensu ale tez i nie przeszkadzają Zas co do rejestrow to wpisz w goole: Wzorzec Registry |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Dzięki nospor za wyjaśnienie. Mnie ktoś kiedyś doświadczony podpowiedział sposób, który użyłem w poście #3 i stąd byłem przekonany, że jest w porządku. Ale od czego jest forum... (IMG:style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 17:18 |