Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> global, zle ?
nasty
post
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 ...
Go to the top of the page
+Quote Post
3 Stron V   1 2 3 >  
Start new topic
Odpowiedzi (1 - 43)
Cysiaczek
post
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
Go to the top of the page
+Quote Post
nasty
post
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
Go to the top of the page
+Quote Post
Cysiaczek
post
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Po co jednak pisać klasy, używać obiektów? Jedna z podstawowych zasad OOP jest zasada hermetyzacji - wlicza się w to również stosowanie zmienych globalnych.
Ż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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Ludvik
post
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.
Go to the top of the page
+Quote Post
nasty
post
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) .
Go to the top of the page
+Quote Post
Ludvik
post
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?
Go to the top of the page
+Quote Post
nasty
post
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
Go to the top of the page
+Quote Post
NuLL
post
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 (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif)

Typo3 - hmm - zajrzyj sobie do eZ publisha i ew stamtad bierz przyklady.
Go to the top of the page
+Quote Post
nasty
post
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
Go to the top of the page
+Quote Post
mike
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(nasty_psycho @ 16.07.2006, 12:28 ) *
OT: TYPO3 jest co najmniej 1000 razy lepsze od eZ publish

LOL
Ładniej wygląda czy jest lepiej i funkcjonalniej napisane?
To pierwsze to może i tak (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
To drugie? ROTFL
Go to the top of the page
+Quote Post
Ludvik
post
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:(IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) B? Propel? PDO? Moje klasy zawsze będą poprawne, bez względu na to, co przekażesz im jako obiekt DAO, bo zawsze interfejs będzie prawidłowy. Twoje zależą od zmiennej globalnej, nad którą nie masz kontroli. W momencie testu nie jesteś w stanie zapewnić, że ta zmienna zawsze będzie poprawna.

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...
Go to the top of the page
+Quote Post
NuLL
post
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%)
-----


Cytat(nasty_psycho @ 16.07.2006, 12:28 ) *
OT: TYPO3 jest co najmniej 1000 razy lepsze od eZ publish

OT: Ty dddddddduuuuuuuuuuzzzzzzzzzzooooooooooo jeszcze musisz sie nauczyc o programowaniu - oj duzo (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif)

EOT
Go to the top of the page
+Quote Post
nasty
post
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.
Go to the top of the page
+Quote Post
Ludvik
post
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.
  1. <?php
  2. function chaos() {
  3. global $_DB;
  4. $db[1] = new PDO('...');
  5. $db[2] = new AdoDBConnection('...');
  6. $db[3] = new InnyObiektDAO('...');
  7. $random = rand(1, 3);
  8. $_DB = $db[$random];
  9. }
  10.  
  11. $_DB = new PDO('..');
  12. $_DB->query('...');
  13. chaos();
  14. $_DB->query('...');
  15. chaos();
  16. $_DB->query('...');
  17. ?>

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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
NuLL
post
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
  1. <?php
  2. $GLOBALS['_SYS']=null;
  3. $GLOBALS['_DB']=null;
  4. ?>

Dopisze sobie w jakims module ( o ile CP bedzie modulowy (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ) czy szablonie i caly Twoj CMS mozna sobie.... ( dopisac samemu wg wlasnej opinii )

@Ludvik - dobre (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten temat niedlugo bedzie mozna przerzucic do dzialu Humor (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował NuLL 16.07.2006, 11:57:21
Go to the top of the page
+Quote Post
Vomit
post
Post #17





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


NuLL, nie krzycz tylko spokojnie wyjasniaj (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

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.
Go to the top of the page
+Quote Post
Strzałek
post
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
Go to the top of the page
+Quote Post
tiraeth
post
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

@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ę (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
nasty
post
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) , to samo mozna zrobic z kazda zmienna. a $_DB nie jest zmienna typu array, ja w cp uzywam tylko ADO i nic innego
@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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
-----------
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
Go to the top of the page
+Quote Post
mike
post
Post #21





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(nasty_psycho @ 16.07.2006, 14:03 ) *
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.

No kurcze, przecież to podstawy programowania obiektowego.
Go to the top of the page
+Quote Post
nasty
post
Post #22





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


to to znam ale mi chodzi o to w moim kodzie pozmieniac, bo nie chce mi sie zmieniac w kazdej prawie funkcji $_DB na jakies tam linki do singletona, za duzo czasu mi to zabierze.

a tak pozatym to testowalem wszystko u mnie na globalach i jest dobrze w niczym nie przerzkadza.

ps. Joomla (mambo) uzywa global - wordpress tez (wiem ze to nie jest 100% OOP ale ...)

gluwnie to typo3 mnie troche uspokoil bo najpierw sie naprawde matrwilem.

Ten post edytował nasty_psycho 16.07.2006, 13:33:58
Go to the top of the page
+Quote Post
Ludvik
post
Post #23





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Cytat
@Ludvik: tak to jest naciagane i to bardzo (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) , to samo mozna zrobic z kazda zmienna. a $_DB nie jest zmienna typu array, ja w cp uzywam tylko ADO i nic innego

Wciąż nie dotarło do Ciebie moje przesłanie. Dla mnie możesz używać dowolnego typu/interfejsu/klasy bazowej. Ja i tak sobie zrobię z tą zmienną co tylko będę chciał. Ba, nawet nie będę musiał się namęczyć.
Chyba nie powiesz, że ta klasa nie będzie bezpieczna...
  1. <?php
  2. class Example {
  3. public function __construct(PDO $db) {
  4. $this->db = $db;
  5. }
  6.  
  7. public function pobierzDane() {
  8. $result = $pdo->query('...');
  9. return $result->fetchAll();
  10. }
  11.  
  12. protected $db;
  13. }
  14. ?>

ZAWSZE będę miał interfejs, o który mi chodzi... Singleton też zapewni bezpieczeństwo.

Cytat
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.

Rozumiem, że wierzysz w bezbłędnych programistów. Dobre API poza tym da radę bez żadnej dodatkowej dokumentacji. Opis metod powinien starczyć, a nie rozpisywanie się na temat tego, co można zrobić, a czego nie... Jeżeli czegoś nie można zrobić, to ty masz zapewnić, że to się nie stanie. Kusisz los zostawiając furtkę...

Kieruj się tym, co napisał Vomit, bo ujął to krótko i ładnie. Taka jest właśnie prawda o zmiennych globalnych...

Cytat
to to znam ale mi chodzi o to w moim kodzie pozmieniac, bo nie chce mi sie zmieniac w kazdej prawie funkcji $_DB na jakies tam linki do singletona, za duzo czasu mi to zabierze.

Nieprzemyślany projekt rodzi problemy przy rozwoju. Miało być pro, a jakoś nie wyszło chyba. Nigdy nie wierzyłem, że porzucając jedną wersję i zaczynając pisać drugą, można zmienić styl pisania w tak znaczny sposób.

OT: Popraw bloga. Chwalisz się, że waliduje się, a tak nie jest.

Ten post edytował Ludvik 16.07.2006, 13:53:12
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #24





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Ale się postów namnożyło (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Nasty: Obrona globali nie ma sensu. Świat poszedł do przodu. Programiści dostając do reki nową klasę chcą jej używać, a nie zastanawiać się, czy klasa nie ma gdzieś jakiegoś globala. Sam, kiedy chcę użyć nowej klasy, patrzę najpierw na interfejs. Od razu wiem, co musze przekazać do konstruktora, jakie ewentualnie metody potrzebują informacji z zewnątrz. Bardzo jestem zadowolony, kiedy mogę przekazać wartości do konstruktora i cieszyć się z używania getCostam() i setCostam(). Gdybym musiał przejmować się tym, że jakaś metoda w klasie używa globala i muszę zadbać o dostarczenie jego wartosci, to przestaje się robic wesoło :/

Piszesz, że nie chcesz robić frameworka. W porządku. Pisz dla siebie. Zauważ, że sam zwróciłes uwagę na to, że nie chce Ci się zmieniać X wystąpień twojej zmiennej na Singletona. To jest właśnie jedna z nieporządanych cech klasy/aplikacji - olbrzymia ilość miejsc, w których należy dokonac poprawek, jeśli coś zmieniasz. Nieużywanie zmiennych globalnych redukuje ten proces do niezbędnego minimum (czuję się jakbym książkę cytował (IMG:http://forum.php.pl/style_emoticons/default/rolleyes.gif) ).
Rozumiem, że twój post był próbą zwrócenia uwagii na istnienie tego typu zmiennych w wielu publikacjach, które są przecież używane. Coż - one kiedyś muszą zostać przepisane lub napisane od nowa.

Pozdrawiam

Ten post edytował Cysiaczek 16.07.2006, 14:00:35
Go to the top of the page
+Quote Post
nasty
post
Post #25





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


Cytat
Nieprzemyślany projekt rodzi problemy przy rozwoju. Miało być pro, a jakoś nie wyszło chyba. Nigdy nie wierzyłem, że porzucając jedną wersję i zaczynając pisać drugą, można zmienić styl pisania w tak znaczny sposób.

problemy przy rozwoju? u mnie global nie sa problemem i nie mam aktualnie zadnych problemow z rozwojem (cms-u oczywiscie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ).
Jutro postaram sie uplodowac to co mam napisane do tej pory.

ogulnie to narazie nie bede zmienial niczego bo jest za duzo pracy przy tym, ale dziekuje za opinje.
Go to the top of the page
+Quote Post
acztery
post
Post #26





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

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


pokaz ten Twój CMS ciekaw jestem co to za cudo. Nasto ja robie byki ortograficzne ale Ty bijesz mnie o stokroć. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował acztery 16.07.2006, 15:18:32
Go to the top of the page
+Quote Post
nasty
post
Post #27





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


Cytat
pokaz ten Twój CMS ciekaw jestem co to za cudo. Nasto ja robie byki ortograficzne ale Ty bijesz mnie o stokroć.

~acztery: bedzie gotowy za jakis 2-3 misiace ale screeny mozesz zobaczyc na stronie,
a co do ortorafji to **** ***** ***** ***** (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

(poprostu nie chce sie za bardzo powtarzac)
Go to the top of the page
+Quote Post
tiraeth
post
Post #28





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


http://wortal.php.pl/wortal/artykuly/php/p...asieg_zmiennych
Go to the top of the page
+Quote Post
nasty
post
Post #29





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


no strasznie mi pomogles, jestem dozgonnie wdzieczny za tak bardzo solidnie napisany i rozbudowany artukul, myslalem ze nigdzie sie nie dowiem jak pacowac ze zmiennymi (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Diwi
post
Post #30





Grupa: Zarejestrowani
Postów: 245
Pomógł: 4
Dołączył: 22.01.2005

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


Haha, nie wiem co powiedzieć. Pomijam to że jest bardzo krótki i g**no daje to jeszcze ma błędy w kodzie php (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif)

Cytat
  1. <?php
  2. $iLiczba = 5; // zmienna globalna
  3. function zmien()
  4. {
  5. global $iLiczba; // tutaj definiujemy, że używamy zmiennej globalnej
  6. $iLiczba = 26; // zmienna lokalna - zasłania globalną zmienną $iNumber
  7. echo 'W funkcji zmien $iNumber = ' . $iNumber . '</br>';
  8. }
  9. echo 'Przed funkcją zmien $iNumber = ' . $iNumber . '<br />';
  10. zmien();
  11. echo 'Po funkcji zmien $iNumber = ' . $iNumber;
  12. ?>


Ten przykład wyświetli:
Przed funkcją zmien $iNumber = 5
W funkcji zmien $iNumber = 26
Po funkcji zmien $iNumber = 26


Dziwne, u mnie na localhost wyświetla:

Cytat
Przed funkcją zmien $iNumber =
W funkcji zmien $iNumber =
Po funkcji zmien $iNumber =


Pozdrawiam
Go to the top of the page
+Quote Post
hwao
post
Post #31


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Pokaże Ci ciekawy sposób
Kod
register_globals = On


I jedizemy tak,
strona.php?_SYS=lol
  1. <?php
  2. function foo() {
  3.  global $_SYS;
  4.  echo $_SYS;
  5. }
  6.  
  7. foo();
  8. ?>

Wynik
Kod
lol


Pomijajac juz inne aspetky bezpieczenstwa

---

No tak, powinno byc On nie Off ale to tylko dla tego że kopiowałem z mojego php.ini i zapomniałem zamienic. Przykład był wymyslany jako najprostrzy jaki wpadł mi w tym momecie do głowy, ale obrazuje co sie moze stac... jego zadaniem nie bylo pokazania jakiegos "super" zagrozenia tylko ujawnienie ze ono jest mozliwe(!) i dlaczego nie powinno sie stosowac global. Taka sytuacja nie miala by miejsca gdyby obiekt byl tworzony wewnatrz jakiegos obiektu.

Także przykład ma działać "na wyobraznie" a nie do gdybania co by było gdyby...
Go to the top of the page
+Quote Post
nasty
post
Post #32





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


~hwao: Przekonales mnie (naprawde!), i dzieki, zaczolem zmieniac powoli $_DB;

jak skoncze to dam ci znac i dasz mi kolejne uwagi, ok ?
Go to the top of the page
+Quote Post
Vomit
post
Post #33





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


fipaj i hwao zwrocili ostatnio uwage na wzorzec Registry. W jednej z ksiazek przeczytalem, ze jest to zwykly Singleton.

Chciałbym jednak zapytac czemuby nie zrobic takiego API? Powinno zdialac tak samo a nie korzystamy z Singletona.

  1. <?php
  2. class MyRegistry
  3. {
  4. static private $aVars = array();
  5.  
  6. static public function setVar( $var, $value )
  7. {
  8.  MyRegistry::$aVars[$var] = $value;
  9. }
  10.  
  11. static public function getVar( $var )
  12. {
  13.  return MyRegistry::$aVars[$var];
  14. }
  15. }
  16. ?>
Go to the top of the page
+Quote Post
tiraeth
post
Post #34





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Cytat(nasty_psycho @ 17.07.2006, 08:49 ) *
~hwao: Przekonales mnie (naprawde!), i dzieki, zaczolem zmieniac powoli $_DB;

jak skoncze to dam ci znac i dasz mi kolejne uwagi, ok ?


~nasty_psycho, zastanawiam się tylko gdzie zostawiłeś narząd, który nazywa się M-Ó-Z-G-I-E-M. Jak byś chociaż przeczytał zawartość tego artykułu to być zrozumiał istotę keyword zwanego jako global" title="Zobacz w manualu php" target="_manual (ostatni kod w tym artykule). A tak to mogę tylko Ci pogratulować umiejętności czytania ze zrozumieniem (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif)

(IMG:http://forum.php.pl/style_emoticons/default/withstupidsmiley.gif) (IMG:http://forum.php.pl/style_emoticons/default/withstupidsmiley.gif)
Go to the top of the page
+Quote Post
nasty
post
Post #35





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


~tiraeth: ja zobaczylem tylko jak "wyglada" ten artykul to az mi sie slabo zrobilo, i mam takie pytanie: czy ty rozumiesz co tu sie pisze w tym topicu? bo chyba nie za bardzo ... :
Cytat
A jeżeli pierwszy raz słyszych o definiowaniu używania zmiennych globalnych w funkcjach czy też w klasach, to gratuluję Twojej umiejętności programowania

Przeciez caly topic jest o globalach, a ty mnie odsylasz do tekstu gdzie jest napisane co to jest global (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) !
Go to the top of the page
+Quote Post
tiraeth
post
Post #36





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Edit: Wracając do posta hwao, który jest błędny.

URL: blabla.php?_SYS=lol

Kod
register_globals = Off

  1. <?php
  2. function foo()
  3. {
  4.  global $_SYS;
  5.  echo $_SYS;
  6. }
  7.  
  8. foo();
  9. ?>


Returns:


Kod
register_globals = On

  1. <?php
  2. function foo()
  3. {
  4.  global $_SYS;
  5.  echo $_SYS;
  6. }
  7.  
  8. foo();
  9. ?>


Returns:
Kod
lol




URL: blabla.php
Kod
register_globals = Off

  1. <?php
  2. $_SYS = 'rotfl';
  3. function foo()
  4. {
  5.  global $_SYS;
  6.  echo $_SYS;
  7. }
  8.  
  9. foo();
  10. ?>


Returns:
Kod
rotfl


Tak to wygląda (przed chwilą sprawdzałem...)
Go to the top of the page
+Quote Post
nasty
post
Post #37





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


ok, koniec klutni (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) !
Postanowielm ze poprawie, i mozecie zobaczy cesciowe efekty poprawien ( bo nie bardzo mialem czasu) na http://crystalpage.sf.net/code/ , tak lepjej ?
Go to the top of the page
+Quote Post
NuLL
post
Post #38





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Cytat
@NuLL: z tego co widze jak myslisz o budowie modulow to masz sklonnosci samobujcze

Taa.....

Ja Ci moge pokazac jak wyglada moj stosunek do zmiennych superglobalnych i globalnych w moim frameworku ktory wykorzystuje na codzien w pracy ? O tak
  1. <?php
  2. class webRequest
  3. {
  4. //kod
  5.  
  6. //singleton
  7. private function __construct(){
  8. //kod
  9. unset($_POST,$_GET,$_SERVER,$_FILES,$_COOKIE,$_ENV,$_SESSION,$GLOBALS,$_REQUEST);
  10. }
  11. }
  12. ?>

I moge Ci zagwaratowac ze zaden programista - nawet Ty (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) nie jest w stanie niczego z nim popsuc piszac modul.
Go to the top of the page
+Quote Post
hwao
post
Post #39


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




ja umie ;] daj mi tylko zrodla ;]

Swoja droga, to jak Twoj system potrafily polozyc zmienen globalne, to nie masz filtrowania zadnych danych...
Go to the top of the page
+Quote Post
NuLL
post
Post #40





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Cytat
Swoja droga, to jak Twoj system potrafily polozyc zmienen globalne, to nie masz filtrowania zadnych danych...

Tzn (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Wszystkie superglobale przed zniszczeniem sa umieszczane w odpowiednich klasach i dostep do kazdej z nich odbywa sie przez filtry (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nasty
post
Post #41





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


no, panowie, moze wreszcie mi powiecie czy teraz jest zmiana na lepsze w kodzie ?
http://crystalpage.sf.net/code/
czy daley isc takim tropem ?
Go to the top of the page
+Quote Post
hwao
post
Post #42


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Jeżeli to poprafiles, to dobrze...

Co do kodu, to ja napewno bym tak nie pisal duzej aplikacji

Zebym nie był goło słowny

  1. <?php
  2. public function GetExtPath($extShotName) {
  3. global $_CP;
  4. if ($dir_handle = opendir('extensions/')) {
  5.  
  6. $files = scandir('extensions/');
  7. while ((list($no, $file) = each($files)) ) {
  8. ?>
Go to the top of the page
+Quote Post
nasty
post
Post #43





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

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


tak, no wiem jeszcze nie wszystkie global sa usuniete ale wszystkie $_DB i troche configu, ale to jest tylko kwestja czasu (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
acztery
post
Post #44





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

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


nasty_psycho wiem ze to nie ma związku z tematem ale polecam Ci wykorzystać DB_DataObject w tym cms szybki o obsługuje różne bazy danych.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 7.10.2025 - 05:43