Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: _toString w Collection
Forum PHP.pl > Forum > PHP > Object-oriented programming
Jarod
Czytałem, że metoda __toString() jest maginczą. Wiem mniej więcej do czego służy. Wytłumaczcie mi dlaczego w poniższym przykładzie w momencie przy
  1. <?php
  2. print $objAdam;
  3. ?>
wykonywane jest __toString() obiektu Foo? Przecież w zmiennej $objAdam trzymane jest Collection..

  1. <?php
  2.  
  3. class Collection {
  4.  
  5.  private $_members = array(); // elementy kolekcji
  6.  
  7.  public function addItem($obj, $key = null) {
  8.  
  9. if($key) {
  10.  if(isset($this->_members[$key])) {
  11. echo "Klucz "$key" jest już zajęty!";
  12.  } else {
  13. $this->_members[$key] = $obj;
  14.  }
  15. } else {
  16.  $this->_members[] = $obj;
  17. }
  18.  }
  19.  
  20.  public function removeItem($key) {
  21.  
  22. if(isset($this->_members[$key])) {
  23.  unset($this->_members[$key]);
  24. } else {
  25.  echo "Błędny klucz "$key"!";
  26. }
  27.  }
  28.  
  29.  public function getItem($key) {
  30.  
  31.  
  32. if(isset($this->_members[$key])) {
  33.  return $this->_members[$key];
  34. } else {
  35.  echo "Błędny klucz "$key"!";
  36. }
  37.  }
  38. }  
  39.  
  40. class Foo {
  41.  private $_name;
  42.  private $_number;
  43.  
  44.  public function __construct($name, $number) {
  45. $this->_name = $name;
  46. $this->_number = $number;
  47.  }
  48.  
  49.  public function __toString() {
  50. return $this->_name . ' ma numer ' . $this->_number;
  51.  }
  52. }
  53.  
  54.  
  55.  
  56. $colFoo = new Collection();
  57. $colFoo->addItem(new Foo("Adam", 14), "adam");
  58. $colFoo->addItem(new Foo("Marek", 37), "marek");
  59. $colFoo->addItem(new Foo("Jacek", 49));
  60.  
  61. $objAdam = $colFoo->getItem("adam");
  62. print $objAdam; // wyświetla "Adam ma numer 14"
  63. $colFoo->removeItem("adam"); // usuwa obiekt 'adam'
  64.  
  65. try {
  66.  $colFoo->getItem("adam"); //zgłasza wyjątek KeyInvalidException
  67. } catch (KeyInvalidException $kie) {
  68.  print "Kolekcja nie zawiera elementu o kluczu 'adam'";
  69. }
  70. ?>
dr_bonzo
Cytat
Przecież w zmiennej $objAdam trzymane jest Collection..

Jestes pewien?

  1. <?php
  2. $colFoo->addItem(new Foo("Adam", 14), "adam");
  3. ....
  4. $objAdam = $colFoo->getItem("adam");
  5. print $objAdam; // to jest FOO
  6. ?>
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.