Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Object of Archer could not be converted to string
Forum PHP.pl > Forum > PHP > Object-oriented programming
michat34
Witam, zgodnie z przykladem w ksiazce zrobilem cos podobnego. Sa jednostki mozna je laczyc w armie i na nich operowac. Przyklad zastosowania kompozycji:

  1. <?php
  2. abstract class Unit
  3. {
  4. abstract public function bombardStrength ();
  5. }
  6.  
  7. abstract class CompositeUnit
  8. {
  9. protected $units = array();
  10.  
  11. public function addUnit (Unit $unit)
  12. {
  13. if (!in_array($unit, $this->units, true))
  14. {
  15. $this->units[] = $unit;
  16. }
  17. return $this;
  18. }
  19.  
  20. public function getArmy ()
  21. {
  22. $units = array();
  23. $list;
  24. foreach ($this->units as $unit)
  25. {
  26. $class = get_class($unit);
  27. if (!array_key_exists($class, $units))
  28. {
  29. $units[$class] = 1;
  30. } else
  31. {
  32. $units[$class]++;
  33. }
  34. }
  35. foreach ($this->units as $unit => $number)
  36. {
  37. $list .= $unit . ' x ' . $number . '<br />';
  38. }
  39. return $list;
  40. }
  41. }
  42.  
  43. class Archer extends Unit
  44. {
  45. public function bombardStrength ()
  46. {
  47. return 2;
  48. }
  49. }
  50.  
  51. class Warrior extends Unit
  52. {
  53. public function bombardStrength ()
  54. {
  55. return 4;
  56. }
  57. }
  58.  
  59. class Calvary extends Unit
  60. {
  61. public function bombardStrength ()
  62. {
  63. return 6;
  64. }
  65. }
  66.  
  67. class Army extends CompositeUnit
  68. {
  69. public function bombardStrength ()
  70. {
  71. $ret = 0;
  72. foreach ($this->units as $unit)
  73. {
  74. $ret += $unit->bombardStrength();
  75. }
  76. return $ret;
  77. }
  78. }
  79.  
  80. $army = new Army;
  81. $army->addUnit(new Archer)->addUnit(new Warrior)->addUnit(new Warrior)->addUnit(new Calvary);
  82. echo $army->getArmy();


Przy skomplikowaniu wywala mi blad z tytułu. Jak to rozwiazac? Myslalem nad uzyciem __toString ale to chyba nie tego typu problem. Bo tutaj przeciez jest to zwykly tekstowy klucz nie rozumiem gdzie jest blad..

ech, niepotrzebne $this przed tablica mozna zamknac
cudny
To dodaj jeszcze o która linie chodzi, bo nikt nie będzie tego przeczesywał na ślepo
HgReed
W CompositeUnit->getArmy() rzutujesz obiekty dziedziczące z Unit na string (linia 37).
mortus
Błąd tkwi jednak zapewne dwie linijki wyżej, tj. w linii 35, gdzie posługujesz się zmienną $this->units, a chciałeś/powinieneś posłużyć się zmienną $units.
kayman
już rozwiązane wiec -> odpowiedz do kosza smile.gif
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.