![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 634 Pomógł: 14 Dołączył: 27.05.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Chcialbym sie dowiedziec czmu wszyscu na forum tak bardzo nie lubia global w klasach i funkcjach.
Jak oladalem sobie kod typo3 to tam jest pelno globalow zreszta tak jest w b. duzej ilosci skryptow ... |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Globale są "be" z kilku powodów. Jednym z ważniejszych jest to, że wiążą ze sobą w sposób bardzo ścisły elementy aplikacji, które powinny byc maksymalnie niezależne. potem masz problemy np. z przeniesieniem kodu do innego projektu.
Z takich bardziej przyziemnych powodów, to globale mają tę wadę, że mogą zostac nadpisane w miejscu najmniej spodziewanym i może być kłopot. Ten post edytował Cysiaczek 16.07.2006, 08:39:35 -------------------- 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
#3
|
|
![]() Grupa: Zarejestrowani Postów: 634 Pomógł: 14 Dołączył: 27.05.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
no ale jak robie sobie program i nie mam zamiary zeby jego kod byl framewokiem albo uzywany gdzies indziej, to chyba nie jest "be" ?
Ten post edytował nasty_psycho 16.07.2006, 08:41:21 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
No dobrze. Możesz tak zrobić i będzie działało
![]() Żeby nie było, że zmienne globalne są zupełnie nieużywane, to podam przykład singletona, który też jest pewnego rodzaju daną globalną. Ma tylko trochę mniej wad ![]() -------------------- 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
#5
|
|
![]() Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Odpowiedz sobie na takie pytania:
- Jak się upewnisz, czy zawartość zmiennej globalnej jest prawidłowa? - Czy będziesz potrafił zachować spójność danych w tej zmiennej? - Gdzie będziesz szukał błędów związanych z tą zmienną, skoro wszędzie będziesz miał do niej całkowity dostęp? Myślę, że nie bez podstaw nikt nie toleruje używania zmiennych globalnych. W przypadku zmian związanych z tą zmienną, cały skrypt Ci się sypie... Cytat no ale jak robie sobie program i nie mam zamiary zeby jego kod byl framewokiem albo uzywany gdzies indziej, to chyba nie jest "be" ? To czy coś jest "be", czy nie, nie określa zastosowanie kodu, a jego jakość. Cytat Jak oladalem sobie kod typo3 to tam jest pelno globalow zreszta tak jest w b. duzej ilosci skryptow ... Oj tak, w bardzo dużej ilości skryptów to znajdziesz. Teraz popatrz jak ludzie się rzucili na php, dzięki jego dostępności i prostocie. Popatrz jakie posty znajdują się czasem w przedszkolu... To, że dużo ludzi tego używa, nie znaczy, że jest to prawidłowe zachowanie. -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 634 Pomógł: 14 Dołączył: 27.05.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Cytat Jak się upewnisz, czy zawartość zmiennej globalnej jest prawidłowa? tak samo jak sie upewniam z narmalnymi zmiennymi, a pozatym w globalach to zazwyczaj jest link to $_DB, itd. Cytat Oj tak, w bardzo dużej ilości skryptów to znajdziesz. Teraz popatrz jak ludzie się rzucili na php, dzięki jego dostępności i prostocie. Popatrz jakie posty znajdują się czasem w przedszkolu... To, że dużo ludzi tego używa, nie znaczy, że jest to prawidłowe zachowanie. Ale chyba TYPO3 nie jest zle, i nie jest robione przez amatorow ? ja nie probuje udowodnic ze global sa dobre, ale ja ich uzywam np http://crystalpage.sf.net/code , tam zobaczysz o co mi chodzi z globalami jak zobaczysz plik init.php i pliki z katalogu cpLib, i chce sie dowiedziec czy oz tak zle sa czy poprostu nie lubiane bo nie lubiane i koniec ![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat Cytat Jak się upewnisz, czy zawartość zmiennej globalnej jest prawidłowa? tak samo jak sie upewniam z narmalnymi zmiennymi, a pozatym w globalach to zazwyczaj jest link to $_DB, itd. Tak sądzisz? Zmienne globalne nie mają żadnej kontroli typów. Przekazując zmienną do metody możesz wpłynąć na jej typ i robisz to w jednym miejscu. Potem zapisujesz wartość i wiesz, że zawsze będzie ona poprawna... A co mi z tego, że zmienna nazywa się $_DB, skoro za chwilę może wyglądać identycznie jak $_CP (zupełnie nieintuicyjna nazwa...) albo $string? -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 634 Pomógł: 14 Dołączył: 27.05.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Cytat $_CP (zupełnie nieintuicyjna nazwa...) $_CP => CrystalPage ale na localu od dawna zmienilem na $_SYS a co mi z kontroli typow jak ja tam chowam tylko zmienne comfig-u i db? np. gdzie jest folder z cachem albo user do bazy danych... tutaj niema co sie bawic w typy w takim przypadku |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Moze zdanie o slowie global jest takie ze powinni dac w php.ini mozliwosc wylaczenia tego slowa wogole ze skladni
![]() Typo3 - hmm - zajrzyj sobie do eZ publisha i ew stamtad bierz przyklady. -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 634 Pomógł: 14 Dołączył: 27.05.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Cytat Typo3 - hmm - zajrzyj sobie do eZ publisha i ew stamtad bierz przyklady. OT: TYPO3 jest co najmniej 1000 razy lepsze od eZ publish
|
|
|
![]()
Post
#11
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat $_CP => CrystalPage ale na localu od dawna zmienilem na $_SYS Rozumiem, że było fajną rozrywką zmieniać wszelkie odwołania do zmiennej $_CP na $_SYS. Cytat a co mi z kontroli typow jak ja tam chowam tylko zmienne comfig-u i db? np. gdzie jest folder z cachem albo user do bazy danych... tutaj niema co sie bawic w typy w takim przypadku Czyli oczekujesz, że zawsze znajdzie się tam tablica? Czyli jednak potrzebujesz kontroli typów... Zrozum, że do tej zmiennej możesz przypisać co chcesz, gdzie chcesz i kiedy chcesz. Na dobrą sprawę przed każdym użyciem wypadało by sprawdzić, czy wciąż zawartość jest poprawna. Chcę zobaczyć, jak piszesz do tego testy... Bo chyba poważny CMS, powinien być przetestowany? Takim sposobem otwierasz sobie furtkę do błędów, których nie wyłapią Ci żadne testy. Ja, kiedy przekazuję obiekt z referencją do DAO, wiem, że dostanę wewnątrz klasy zawsze to, czego potrzebuję. Natomiast po twojej zmiennej $_DB nie wiem czego się mam spodziewać? AdoDB? PEAR: ![]() Na dobrą sprawę, wywołując dwa zapytania, a pomiędzy nimi jakieś instrukcje, możesz nawet nie dowiedzieć się, że używasz innej bazy danych... -------------------- |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
OT: TYPO3 jest co najmniej 1000 razy lepsze od eZ publish OT: Ty dddddddduuuuuuuuuuzzzzzzzzzzooooooooooo jeszcze musisz sie nauczyc o programowaniu - oj duzo ![]() EOT -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 634 Pomógł: 14 Dołączył: 27.05.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Cytat OT: Ty dddddddduuuuuuuuuuzzzzzzzzzzooooooooooo jeszcze musisz sie nauczyc o programowaniu - oj duzo A ty jeszcze wiecej... "Krowa, która dużo ryczy, mało mleka daje" --------------------------------------------------------------------------- W tym $_DB zawsze jest tylko i wylacznie link to objektu ADO i nie bede tam wstawiac PDO czy innych perdul, a moge byc pewny ze tam jest to co chce bo sa w globalach zachowywane tylko dane z plikow ini ktore sa zbierane za pomoca PEAR::Config, i ja sie nie zbiorol to skrypt nie konczy tylko pokazuje errora ( to co jest uplodowane to jest stare i chcialem zebyc tylko zobaczyl o co mi chodzilo). i z $_DB tak samo jak sie nie poloczy to nie knoczy egzekucji. Po drugie zarowno $_SYS jak i $_DB sa uzywane tylko przez cms i nikt niema do nich dostepu oprucz samego cms-u. |
|
|
![]()
Post
#15
|
|
![]() Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat Po drugie zarowno $_SYS jak i $_DB sa uzywane tylko przez cms i nikt niema do nich dostepu oprucz samego cms-u. Rozumiem, że zabronisz ich używania? Czyli nie przewidujesz w swoim systemie rozszerzeń? To cóż to za CMS, którego nie można rozszerzać... A teraz mam dla Ciebie zagadkę w postaci kodu php.
Wiem, że przykład jest naciągany, ale dokładnie pokazuje jak "bezpieczne" są zmienne globalne. Uwierz mi, że zawsze, kiedy inna osoba dobiera się do kodu istnieje prawdopodobieństwo, że zrobić coś podobnego, lecz nie w tak dobitny sposób. Czekam tylko, aż ustosunkujesz się do mojego pytania z testami ![]() -------------------- |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Cytat Po drugie zarowno $_SYS jak i $_DB sa uzywane tylko przez cms i nikt niema do nich dostepu oprucz samego cms-u. LOL
Dopisze sobie w jakims module ( o ile CP bedzie modulowy ![]() @Ludvik - dobre ![]() ![]() Ten post edytował NuLL 16.07.2006, 11:57:21 -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 122 Pomógł: 0 Dołączył: 23.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
NuLL, nie krzycz tylko spokojnie wyjasniaj
![]() Zmienne globalne sabotuja hermetyzacje i głownie o to chodzi. Nie jest to zgodne z aspektami programowania OOP, staja sie przyczyna smietniku w kodzie. Postronny programista nie wie skad nagle dana zmienna sie wziela. Zmienne globalne sa nie tylko omijane z daleka w php ale w kazdym innym jezyku programowania. Oczywiscie sa tacy ktorzy korzystaja z nich... na wlasna odpowiedzialnosc, ja z takim kodem nie chcialbym pracowac. |
|
|
![]()
Post
#18
|
|
![]() Grupa: Przyjaciele php.pl Postów: 384 Pomógł: 6 Dołączył: 11.09.2004 Skąd: Grodzisk Mazowiecki Ostrzeżenie: (0%) ![]() ![]() |
Cytat "Krowa, która dużo ryczy, mało mleka daje" Jak dla mnie eZ to: "Krowa, która dużo mleka daje". A globale z reguły stwarzają dużo kłopotów... Ten post edytował Strzałek 16.07.2006, 12:25:17 -------------------- |
|
|
![]()
Post
#19
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 789 Pomógł: 41 Dołączył: 30.10.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Gdyby globale były super fajne i bezpieczne, to twórcy php nie ustawialiby ich domyślnie na OFF
![]() @nasty_psycho: No to fajne CMSy piszesz, bez możliwości rozbudowy... i jeszcze uważasz, że TYPO3 jest lepsze od eZ Publish :| Poprostu gratuluję ![]() |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 634 Pomógł: 14 Dołączył: 27.05.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Sa mozliwosci rozbudowy nawet b. duzo jest ok 10 klas do pracowania z rozszezeniami.
ALE: Jak kots robi extension to nie bedzie chyba wysadzal sobie cms-u albo hackowac. Bedzie caly dokument o tym jak pisac dodatki do cms-u i tam bedzie jasno napisane zeby tych zmiennych nie uzywac. @Ludvik: tak to jest naciagane i to bardzo ![]() @Strzalek: to nie bylo o eZ, bo eZ jest bardzo dobry, tylko o NuLL. @tiraeth: nie chce sie powtarzac ale moj cms ma rozbudowane mozliwosci podczepiania extension-ow i ustalania ich rodzaju jak np. Startup, filter czy content i wiele innych. @NuLL: z tego co widze jak myslisz o budowie modulow to masz sklonnosci samobujcze ![]() ----------- no i wedlug was jak mozna w alternatywny sposob dla kazdej klasy / funkcji dac mozliwosc korzystania z $_DB ? zeby nie bylo balaganu i w kazdej klasie miec public $dblink. pozdrawiam Ten post edytował nasty_psycho 16.07.2006, 13:03:51 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.06.2025 - 06:11 |