Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kilku poziomowy __get
Moli
post
Post #1





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

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


Mam w klasie tablicę o takiej wartośc
Kod
Array (
'imie' => Array ( 'pierwsze' => 'Michal' , 'drugie' => 'Jan' ) ,
'nazwisko => Array ( 'rodowe' => 'Kowalski' ) ,
)

i teraz chce w do jej elementów odwoływac się poprzez
Kod
$this->imie->pierwsze (zwroci Michał)


Jak dobrze to rozwiązać ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
kicaj
post
Post #2





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


  1. <?php
  2. $aNames = ... // twoja tablica
  3.  
  4. //...
  5.  
  6. public function __get( $sName )
  7. {
  8. return $aNames[$sName];
  9. }
  10. ?>

Dodaj warunki jeszcze...
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Moli: do tablicy odwolujesz sie
$tablica['indeks'];
a nie
$tablica->indeks;

tak ze musisz ten problem rozwiazac (wpakowac tablice w klase itp)
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


No bez przesady. Powiedz mi jak można nie wpaść na tępe wstukanie w Google: array to object php
Cztery krótkie słowa bez inwencji twórczej a masz dzięki temu stertę gotowców.

http://www.phpfreaks.com/quickcode/Array-to-Object/541.php
Go to the top of the page
+Quote Post
Moli
post
Post #5





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

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


@Mike - Widziałem tą stronę i tą funkcję. Z takim rozwiązaniem bym sobie poradził, ale nie mogę sobie poradzić z tym żeby to było w __get i wartośći z tablicy były pobierane dopiero przy daniu w kodzie $this->imie->pierwsze.
Go to the top of the page
+Quote Post
Whisller
post
Post #6





Grupa: Zarejestrowani
Postów: 77
Pomógł: 5
Dołączył: 29.03.2006
Skąd: Poznań

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


@Moli
Nie ma możliwości odwołania się w taki sposób, przynajmniej mi osobiscie nic na ten temat nie wiadomo.
Ponieważ odwołanie typu $myClassObject->first->second jest traktowane jako odwołanie do zmiennej second obiektu first.
Więc zapis
  1. <?php
  2. class MyClass
  3. {
  4. public function __get($name)
  5. {
  6.  echo 'Name: '.$name;
  7.  }
  8. }
  9.  
  10. $oClass = new MyClass();
  11. $oClass->first->second;
  12. ?>


Zwróci nam
//--
Name: first
Notice: Trying to get property of non-object in PATH on line 13
//--
Go to the top of the page
+Quote Post
arecki
post
Post #7





Grupa: Zarejestrowani
Postów: 222
Pomógł: 35
Dołączył: 6.02.2005

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


Może o coś takiego Ci chodziło ?

  1. <?php
  2.  
  3. class multiget {
  4.  
  5. private $data = array();
  6.  
  7. public function __construct(Array $array) {
  8. $this->data = $array;
  9. }
  10.  
  11. public function __get($name) {
  12. if(key_exists($name, $this->data)) {
  13. if(is_array($this->data[$name])) {
  14. return new self($this->data[$name]);
  15. } else {
  16. echo $this->data[$name];
  17. }
  18. } else {
  19. return 'invalid request';
  20. }
  21. }
  22.  
  23. public function __toString() {
  24. return 'invalid request';
  25. }
  26.  
  27. }
  28.  
  29.  
  30.  
  31. /**
  32.  * test klasy
  33.  */
  34.  
  35. $test = new multiget(Array(
  36. 'imie' => Array ( 
  37. 'pierwsze' => 'Michal' , 
  38. 'drugie' => 'Jan'),
  39. 'nazwisko' => Array (
  40. 'rodowe' => 'Kowalski'),
  41. 'wiek' => '36'
  42. ));
  43.  
  44. echo $test->imie->drugie;
  45.  
  46. ?>


Ten post edytował arecki 12.02.2008, 20:50:18
Go to the top of the page
+Quote Post
SHiP
post
Post #8





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

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


Moja stara klasa:

http://forum.php.pl/index.php?showtopic=75108
Go to the top of the page
+Quote Post

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: 23.08.2025 - 16:06