Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kontrola zmiennych
Major
post
Post #1





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 22.07.2004

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


Witam,

Chciałbym sie spytać czy w php5.1 jest możliwość sprawdzania poprawności używanych zmiennych.

Mam zmienne generowane dynamicznie i nie moge pozwolić by któraś z nich została nadpisana, albo jej typ został zmieniony czy też w ogole usunięta z pamięci.


--------------------
Udzielasz sie w PHP Pro?
Uważasz sie za profesjonaliste?
Przeczytaj to
Go to the top of the page
+Quote Post
NuLL
post
Post #2





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

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


  1. <?
  2.  
  3. class varsRegistry
  4. {
  5.  
  6. private $data;
  7.  
  8. public static instance()
  9. {
  10. //..
  11. }
  12. private function __construct()
  13. {
  14. //..
  15. }
  16. public function __set($name,$value)
  17. {
  18. $this->data[$name]=$value;
  19. }
  20. public function __get($name)
  21. {
  22. return $this->data[$name];
  23. }
  24. }
  25. ?>

To można to zrobić najprościej. Zmienne nie są ogólnie dostępne i aby dostać się
 do jakieś z nich musisz napisac:
  1. <?php
  2.  
  3. $zmienna=varsRegistry::instance()->zmienna;
  4. ?>


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Major
post
Post #3





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 22.07.2004

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


Myślałem o podobnym rozwiązaniu wcześniej ale niestety odpada bo wtedy cały system straci swoją prostote, myślałem że coś sie znajdzie w SPL ale niestety nie znalazłem tam niczego takiego.


--------------------
Udzielasz sie w PHP Pro?
Uważasz sie za profesjonaliste?
Przeczytaj to
Go to the top of the page
+Quote Post
dtb
post
Post #4





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

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


  1. <?php
  2. class vars
  3. {
  4. private vars;
  5. pubic function __get ($name)
  6. {
  7. return $this>vars[$name];
  8. }
  9. public function __set ($name, $value)
  10. {
  11. $this->vars[$name] = $value;
  12. }
  13. }
  14.  
  15. # Uzywanie zmiennych w skrypcie:
  16.  
  17. $var = new vars;
  18.  
  19. $var->lol = 'tekst';
  20. echo $var->lol;
  21. ?>


Ten post edytował dtb 11.12.2005, 20:42:30


--------------------
Go to the top of the page
+Quote Post
NuLL
post
Post #5





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

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


Przepraszam - ROTFL

Jak ty chcesz z tego korzystac w obrebie skryptu i czym to sie sie rozni od mojego rozwiazania pozatym jest mocno kulawe ? Za kazdym razem chcesz tworzyc nowa instancje tej klasy ?

Ten post edytował NuLL 11.12.2005, 20:46:29


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
dtb
post
Post #6





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

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


czytalem ze tworzac instancje klasy skrypt dziala szybciej (nie potrafie w tej chwili dac linku)
EDIT: i po co komu konstruktor i instance()?
EDIT2:
Cytat(webcity.pl)
Jako ciekawostkę dodam, iż używanie elementów statycznych jest odrobinę wolniejsze od tworzenia i korzystania z normalnych obiektów


Ten post edytował dtb 11.12.2005, 21:07:58


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


To nie temat o szybkosci OOP
NuLL tworzy jeden obiekt (wzorzec Singleton), a dtb wiele. I co jest szybsze?

Ja nadal nie rozumiem o co chodzi
Cytat
sprawdzania poprawności używanych zmiennych.

Mam zmienne generowane dynamicznie i nie moge pozwolić by któraś z nich została nadpisana, albo jej typ został zmieniony czy też w ogole usunięta z pamięci.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Major
post
Post #8





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 22.07.2004

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


Chodzi o to że mam zmienne/tablice
$nazwaZmiennej
I ona nie może zmienić typu string / array / int a nie może przybrać wartościu null czy być unsetowana. Jeżeli typ zostanie zmieniony to najlepiej by był wygenerowany wyjątek.


--------------------
Udzielasz sie w PHP Pro?
Uważasz sie za profesjonaliste?
Przeczytaj to
Go to the top of the page
+Quote Post
sobstel
post
Post #9





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(Major @ 2005-12-11 21:19:02)
Chodzi o to że mam zmienne/tablice
$nazwaZmiennej
I ona nie może zmienić typu string / array / int a nie może przybrać wartościu null czy być unsetowana. Jeżeli typ zostanie zmieniony to najlepiej by był wygenerowany wyjątek.

imho najlepszym rozwiazaniem byloby to co napisal NULL + sprawdzanie typu


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Ociu
post
Post #10





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Moim zdaniem nie można czegoś takiego zrobić. Nie można sprawić, aby nie pożna było wykasować elementu z tablicy czy sprawić aby zmienna nie mogła przyjąć innej wartości etc.
Go to the top of the page
+Quote Post
dtb
post
Post #11





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 5.11.2005
Skąd: Bieruń city

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


  1. <?php
  2. private vars;
  3. private types;
  4.  
  5. public function __set ($name, $value)
  6. {
  7. if ($this->types[$name]==NULL)
  8. {
  9. $this->types[$name]=gettype ($value);
  10. $this->vars[$name] = $value;
  11. }
  12. elseif ($this->types[$name]==gettype ($value))
  13. $this->vars[$name] = $value;
  14. else
  15. throw new Exeception ('Zmieniony typ');
  16. }
  17. ?>


Ten post edytował dtb 12.12.2005, 08:22:29


--------------------
Go to the top of the page
+Quote Post
Ociu
post
Post #12





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




vars i types powinno być array();

A poza konkursem.

Co jeśli zmienie typ przed 'wywołaniem funkcji' __set ? kicha.

Tak samo jak zrobisz obserwowanie unset() ?
Go to the top of the page
+Quote Post
konradk2
post
Post #13





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 28.12.2005

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


możesz używać do tworzenia dynamicznego klasy eval() albo spróbować na stałych ale to jak rozumiem nie przejdzie...
Go to the top of the page
+Quote Post
Radarek
post
Post #14





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 23.05.2005

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


php wymaga od programistow samodyscypliny. Jesli jej nie bedziesz mial to nic ci nie pomoze :-). Przy dosc dobrze zaprojektowanym systemie (oop) jest to duzo latwiejsze niz przy wczesniejszych rozwiazaniach (np masa globalnych zmiennych, do ktorych mialo sie dostep w kazdym miejscu skryptu). Co tu duzo mowic: pilnowac, pilnowac i jeszcze raz pilnowac (sie).
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 17:34