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 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 (1 - 4)
.dragonfly
post
Post #2





Grupa: Zarejestrowani
Postów: 217
Pomógł: 0
Dołączył: 5.10.2003
Skąd: Londyn / UK

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


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. ?>
Go to the top of the page
+Quote Post
grohu
post
Post #3





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 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
Imperior
post
Post #4





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 16.10.2004

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


Może tak?
  1. <?php
  2. $method = &#092;"printDoors\";
  3. $this->{$method}();
  4. ?>


--------------------
Com powiedział, powiedziałem.
Go to the top of the page
+Quote Post
grohu
post
Post #5





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

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


tak, dzieki exclamation.gif
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 11:01