Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [skrypt] Obłsuga Typów w php
Forum PHP.pl > Inne > Oceny
Jabol
Oto moje skrypty (init.php):
  1. <?php
  2.  
  3. require_once(dirname(__FILE__).'/PhpType.class.php');
  4. require_once(dirname(__FILE__).'/ArrayType.class.php');
  5. require_once(dirname(__FILE__).'/BooleanType.class.php');
  6. require_once(dirname(__FILE__).'/CallableType.class.php');
  7. require_once(dirname(__FILE__).'/FloatType.class.php');
  8. require_once(dirname(__FILE__).'/IntType.class.php');
  9. require_once(dirname(__FILE__).'/NullType.class.php');
  10. require_once(dirname(__FILE__).'/ObjectType.class.php');
  11. require_once(dirname(__FILE__).'/ResourceType.class.php');
  12. require_once(dirname(__FILE__).'/ScalarType.class.php');
  13. require_once(dirname(__FILE__).'/StringType.class.php');
  14. require_once(dirname(__FILE__).'/EBadType.class.php');
  15.  
  16. ?>
PhpType.class.php
  1. <?php
  2.  
  3. abstract class PhpType
  4. {
  5. protected $_var;
  6.  
  7. abstract protected function _check();
  8. public function __construct($_var)
  9. {
  10. $this->_var=$_var;
  11. if(!$this->_check()) throw new EBadType('Bad Type');
  12. }
  13. public function __get($_name)
  14. {
  15. return $this->_var;
  16. }
  17. public function __set($_name, $_val)
  18. {
  19. $ret=$this->_var;
  20. $this->_var=$_val;
  21. return $ret;
  22. }
  23. }
  24.  
  25. ?>
EBadType.class.php
  1. <?php
  2.  
  3. class EBadType extends Exception
  4. {
  5. }
  6.  
  7. ?>
IntType.class.php
  1. <?php
  2.  
  3. class IntType extends PhpType
  4. {
  5. protected function _check()
  6. {
  7. return is_int($this->_var);
  8. }
  9. }
  10.  
  11. ?>
I tak dalej już idą typy. Jeżeli chcecie całość to proszę pisać na pw, a wyśle spakowane na maila.
Tutaj test
  1. <?php
  2.  
  3. function requiresint(IntType $_int)
  4. {
  5. print $_int->var;
  6. $_int->var=8;
  7. print $_int->var;
  8. }
  9.  
  10. require_once('types/init.php');
  11. print &#092;"IntType(5)n\";
  12. $int=new IntType(5);
  13. print &#092;"ArrayType(array(10))n\";
  14. $arr=new ArrayType(array(10));
  15. print &#092;"BooleanType(TRUE)n\";
  16. $bln=new BooleanType(TRUE);
  17.  
  18. try
  19. {
  20. print &#092;"ResourceType(NULL)n\";
  21. $res=new ResourceType(NULL);
  22. }
  23. catch (EBadType $e)
  24. {
  25. print $e;
  26. print &#092;"nError catchedn\";
  27. }
  28.  
  29. requiresint($int); // OK
  30. requiresint($bln); // BŁĄD php
  31.  
  32. ?>
Proszę o ocene i ewentualne komentarze, pomysły.
sf
Przydalyby sie jakies linki do przykladow gdzie pokazanoby skutki/wyniki uzycia tego skryptu tongue.gif
Seth
Fajny pomysl, cos na ksztalt opakowywania typow w C#.
Brakuje mi tutaj tylko czegos w rodzaju rzutowania na inny typ (moze dac jakas metode do tego) oraz dodaktowych metod dostepnych dla danego typu (np. GetType - do zwracania typu zmiennej [dal bym to do klasy PhpType], w typie sting np cos takiego jak: $stringTest.SubStr(x,y) itp. ).

Pomysl mi sie pdoba czekam na wiecej smile.gif
Jabol
@sf: właśnie próbuje zdobyć jakoś stałe ip, więc może potem.
@Seth: napisałem to dzisiaj, więc jeszcze nic nie ma specjalnego (działa, to chciałem osiągnąć), ale to tylko kwestia rozbudowy klas. Myślałem już o tym o czym mówisz i myśle, że w miare potrzeb będe to rozbudowywał.

Ogólnie to wkurzył mnie pomysł, że można w funkcjach mówić jakiej klasy instancją ma być argument, a nie można napisać jakiego ma być typu. Napisałem to więc by się do tego dostosować i to był główny powód, ale myślę, że pomysł rozbudowy w celu łatwiejszego wykorzystania jest dobry i będzie z czasem realizowany. A tak wogóle to zauważcie, że nigdzie nie ma słówka private ani final, więc jeżeli czegoś potrzebujecie nie bójcie się użyć extens i zrobić tego, co Wam potrzebne.

//edit: A tak wogóle to mnie naszła właśnie myśl, że w tym można nawet zaimplementowac objekt typu XRange aaevil.gif (pozdr00fka dla fanów pythona, hihi, właśnie to robie), oraz inne bajery
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.