Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Obsłga tablic za pomocą magicznych metod klas
NeooeN
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 27.04.2010

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


Witam!
Taki oto kod:
Kod
<?
class myClass {

  public function __set($name, $value) {
   echo '$name';
  }

  public function __get($name) {
        echo '$name';
  }
}

$klasa = new myClass;
$klasa->tablica[0] = 0;
echo "\n";
$zmienna = $klasa->tablica["klucz"];
?>
zwraca takie coś:
Kod
tablica
tablica
Jak widać zdeklarowałem klase z magicznymi metodami __set i __get a następnie próbuje zapisać i pobrać pewne wartości do i z tablic. Niestety funkcje te zwracają tylko informcje o nazwie tej tablicy i ani słowa o ewentualnym indeksie (tak jak by była to zwykła zmienna, skalar). Czy jest jakiś sposób aby mimo wszystko za pomocą tych metod obsłużyć tablice tak abym mógł w ramach klasy dynamicznie je tworzyć i zmieniać podobnie jak ma to miejsce przy zabawie ze zmiennymi?
Z góry dziękuje za pomoc!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Jednakże istnieje rozwiązanie Twojego problemu. Potrzeba, aby magiczna metoda __get zwracała referencję do naszego obiektu, jak poniżej:
  1. <?php
  2. class myClass {
  3.  
  4. public function __set($name, $value) {
  5. $this->$name = $value;
  6. }
  7.  
  8. public function &__get($name) {
  9. return $this->$name;
  10. }
  11.  
  12. }
  13. $klasa = new myClass();
  14. $klasa->dane[0] = 'dana 1';
  15. $klasa->dane[1] = 'dana 2';
  16. echo '<pre>'; print_r($klasa->dane); echo '</pre>';
Chodzi o to, że w PHP począwszy od wersji 5.2.0 metoda __get zwraca kopię obiektu, a nie jak to było we wcześniejszych wersjach referencję do tego obiektu. Dlaczego tak jest? Nie wiem. Niemniej powoduje to brak dostępu do konkretnego elementu tablicy, choć nie do samej tablicy.

Ten post edytował mortus 27.04.2010, 20:38:08
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: 2.10.2025 - 20:47