Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: opcjonalne argumenty w funkcjach
Forum PHP.pl > Forum > PHP
jogurt666
pracuję nad klasą wspomagającą pracę z bazą danych MySQL. początek klasy wygląda tak:


  1. <?php
  2.  
  3. class db
  4. {
  5. var $host = &#092;"localhost\";
  6. var $db = &#092;"sample\";
  7.  
  8. function db()
  9. {
  10. $args = func_get_args();
  11. if($args[0] != $this->db && !empty($args[0])) $this->db = $args[0];
  12. if($args[1] != $this->host && !empty($args[1])) $this->host = $args[1];
  13. }
  14.  
  15. //reszta metod
  16. }
  17.  
  18. ?>

jak widać metoda db ma być wywołana podczas tworzenia obiektu i ma przyjmować 2 opcjonalne argumenty. tutaj poradziłem sobie z tym używając funkcji func_get_args(), w razie kiedy któryś z argumentów nie zostanie przekazany, metoda użyje wartości domyślnych dla tych argumentów.

metoda niby załatwia sprawę opcjonalnych argumentów, ale jest to zrobione "na dziko". czy jest jakiś lepszy sposób na przekazywanie opcjonalnych argumentów dla funkcji/metod (abstrachuję tutaj od global)?
Yarecki
np. można tak:
  1. <?
  2. class Db
  3. {
  4. var $host = &#092;"localhost\";
  5. var $db = &#092;"sample\";
  6.  
  7. function db( $args )
  8. {
  9. if($args[0] != $this->db && !empty($args[0])) $this->db = $args[0];
  10. if($args[1] != $this->host && !empty($args[1])) $this->host = $args[1];
  11. }
  12.  
  13. //reszta metod
  14. }
  15. ?>

i wywołanie wygląda tak:
  1. <?php
  2.  
  3. $arrArgs = array( 'inny_host', 'inna_db' );
  4. $objDb = &new Db( $arrArgs );
  5.  
  6. ?>
mls
Hmm...
  1. <?php
  2. class db
  3. {
  4.  var $host;
  5.  var $db;
  6.  
  7.  function db($db = 'sample', $host = 'localhost')
  8. {
  9.  $this->db = $db;
  10.  $this->host = $host;
  11. }
  12.  
  13. //reszta metod
  14. }
  15. ?>


Czy źle zrozumiałem?
Amao
Można też tak :
  1. <?
  2. class Db
  3. {
  4. var $host = &#092;"localhost\";
  5. var $db = &#092;"sample\";
  6.  
  7. function db($db=false,$host=false)
  8. {
  9.  
  10. if($db)
  11. {
  12. $this->db = $db;
  13. }
  14. if($host)
  15. {
  16. $this->host = $host;
  17. }
  18.  
  19. }
  20.  
  21. }
  22. ?>
Jabol
a nie łatwiej?
  1. <?php
  2. class db
  3. {
  4. var $db=&#092;"default\", $host=\"default\";
  5. function _set_db($db=null)
  6. {
  7. if($db) $this->db=$db;
  8. }
  9. function _set_host($host=null)
  10. {
  11. if($host) $this->host=$host;
  12. }
  13. function db($db=null, $host=null)
  14. {
  15. $this->_set_db($db);
  16. $this->_set_host($host);
  17. }
  18. }
  19. $db=new db();
  20. $db=new db(&#092;"nie_default\");
  21. $db=new db(&#092;"nie_default\", null);
  22. $db=new db(null, &#092;"nie_default\");
  23. $db=new db(&#092;"nie_default\", \"nie_default\");
  24. $db=new db; $db->_set_host(&#092;"nie_default\");
  25. // i tak dalej
  26. ?>
rozwiązanie podobne do Amao, ale lubiem jak można coś robić ręcznie i np. zmieniać sobie potem.
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-2025 Invision Power Services, Inc.