Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak zrobic klasę dziedziczącą ArrayAccess (lub jej pochodne) reprezentującą tablice wielowymiarową
doseo
post 6.10.2008, 00:19:45
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 3
Dołączył: 23.01.2007
Skąd: Dys/Lublin

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


Czy da się w php napisać klasę która reprezentowała by tablicę 2 (i więcej) wymiarową, a dostęp do jej obiektów wyglądał by jak przy zwykłej tablicy, tzn.:
  1. <?php
  2. $tablica = new A;
  3. $tablica[1][2] = "cokolwiek";
  4. ?>

I jeśli się da to jak to zrobić?
Zaznaczę, że wiem jak rozwiązać problem w przypadku jednego wymiaru:)

//do Moda: zapomniałem o dziale obiektowym, a opcji "usuń post" nie widzę.

Ten post edytował doseo 6.10.2008, 00:25:10
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
devnul
post 6.10.2008, 02:11:22
Post #2





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


jest rozwiązanie mianowicie każdy poziom zagnieżdżenia poza ostatnim musiałby zwracać obiekt implementujący arrayacces, innego wyjścia nie ma


--------------------
Profesjonaliści są przewidywalni...
strzeż się amatorów...
FL4SHB4CK - imprezy, galerie, lokale
Go to the top of the page
+Quote Post
doseo
post 6.10.2008, 21:14:37
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 3
Dołączył: 23.01.2007
Skąd: Dys/Lublin

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


Dzięki, tak też miałem zrobione. Ale w konstruktorze zapomniałem o "$this->" smile.gif
Często popełniam takie błędy pisząc w nocy - amatorszczyzna:)

  1. <?php
  2.  
  3. class A implements ArrayAccess
  4. {
  5.    protected $_array = array();
  6.    
  7.    public function __construct( $array )
  8.    {
  9.        foreach ( $array as $k => $v )
  10.            if ( is_array( $v ) )
  11.                $this->_array[$k] = new A( $v );
  12.            else
  13.                $this->_array[$k] = $v;
  14.    }
  15.    
  16.    public function offsetExists( $offset )
  17.    {
  18.        return array_key_exists( $offset, $this->_array );
  19.    }
  20.    
  21.    public function offsetGet( $offset )
  22.    {
  23.        return $this->_array[$offset];
  24.    }
  25.    
  26.    public function offsetSet( $offset, $value )
  27.    {
  28.        $this->_array[$offset] = $value;
  29.        
  30.        return true;
  31.    }
  32.    
  33.    public function offsetUnset( $offset )
  34.    {
  35.        unset( $this->_array[$offset] );
  36.        
  37.        return true;
  38.    }
  39. }
  40. ?>
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:21