Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] programowanie obiektowe
Forum PHP.pl > Forum > PHP
grohu
Poniższa przykładowa klasa tworzy obiekt Car, mam problem ze zmianą wartości obiektu mając nazwę tej właściwości w formacie string (czyli mam "doors" a nie "$this->doors"), problem występuje w funkcji changeValue() ...


  1. <?php
  2. class Car {
  3. var $doors = 4;
  4.  
  5. function Car() {
  6.  $this->doors = 18;
  7. } 
  8.  
  9. function printDoors() {
  10.  echo &#092;"<b>Doors:</b> \".$this->doors.\"<br>\";
  11. }
  12.  
  13. function changeValue($val) {
  14.  $temp = explode(&#092;"=\", $val);
  15.  // $temp[0] - nazwa atrybutu obiektu
  16.  // $temp[1] - jego nowa wartość
  17.  
  18.  // Jak mając dwie powyższe wartości zmienić wartość atrybutu obiektu questionmark.gif?
  19. }
  20.  
  21.  
  22. }
  23.  
  24.  
  25. $c1 = new Car();
  26. $c1->printDoors();
  27.  
  28. $c1->changeValue(&#092;"doors=666\");
  29. $c1->printDoors();
  30.  
  31. ?>
.dragonfly
O to ci chodzi?

  1. <?php
  2.  
  3. function changeValue($val) {
  4.  $temp = explode(&#092;"=\", $val);
  5.  // $temp[0] - nazwa atrybutu obiektu
  6.  // $temp[1] - jego nowa wartosc
  7.  $this->doors = $temp[1];
  8.  
  9.  // Jak majac dwie powyzsze wartosci zmienic wartosc atrybutu obiektu questionmark.gif?
  10. }
  11.  
  12. ?>

czy

  1. <?php
  2.  
  3. function changeValue($val) {
  4.  $temp = explode(&#092;"=\", $val);
  5.  // $temp[0] - nazwa atrybutu obiektu
  6.  // $temp[1] - jego nowa wartosc
  7.  $this->$temp[0] = $temp[1];
  8.  
  9.  // Jak majac dwie powyzsze wartosci zmienic wartosc atrybutu obiektu questionmark.gif?
  10. }
  11.  
  12. ?>
grohu
nie chodzi mi o to, ze jak dodam do klasy kolejny atrybut np. windows i chcialbym wywolac funkcje
  1. <?php
  2. changeValue(&#092;"windows=4\");
  3. ?>
wtedy zmieni mi sie wartosc argumentu obiektu o nazwie windows ...

W funkcji nalezy uzyc
  1. <?php
  2. $this->{$temp[0]} = $temp[1];
  3. ?>


albo lepiej zeby wyeliminowac problem zbednych spacji
  1. <?php
  2. $this->{trim($temp[0])} = trim($temp[1]);
  3. ?>


i gotowe smile.gif




ALE:
Swoja droga jestem ciekaw jak wywolac metody, ktorym nazwy zostaly przekazane w taki sam sposob jak powyżej, intuicyjnie sprobowalem
  1. <?php
  2. $method = &#092;"printDoors()\";
  3. $this->{$method};
  4. ?>
ale ten sposob nie dziala wiec szukam innego, skutecznego...
Imperior
Może tak?
  1. <?php
  2. $method = &#092;"printDoors\";
  3. $this->{$method}();
  4. ?>
grohu
tak, dzieki exclamation.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.