Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V  < 1 2 3 >  
Reply to this topicStart new topic
> global, zle ?
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

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: 24.12.2025 - 22:44