Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] programowanie obiektowe, dostęp do atrybutu obiektu (string)
grohu
post
Post #1





Grupa: Zarejestrowani
Postów: 118
Pomógł: 0
Dołączył: 29.07.2003
Skąd: skąd-inąd.

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
grohu
post
Post #2





Grupa: Zarejestrowani
Postów: 118
Pomógł: 0
Dołączył: 29.07.2003
Skąd: skąd-inąd.

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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...

Ten post edytował grohu 29.11.2004, 19:43:23
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 21:55