Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] tablica wewnątrz klasy
Forum PHP.pl > Forum > Przedszkole
janlgorski
Cześć!
Do tej pory przejście na php było dla mnie bezbolesne, ale tego problemu nie mogę pokonać. Piszę skrypt, w którym jest tworzona tablica (array), wewnątrz klasy. Po utworzeniu obiektu klasy, próba uzyskania rozmiaru tablicy (sizeOf) kończy się błędem Undefined Variable.

  1. ///////////////////////////////////////
  2. class klasaWewnetrzna {
  3. public $position;
  4.  
  5. public function __construct() {
  6. $position = array(0);
  7. }
  8.  
  9. }
  10. ///////////////////////////////////////
  11. class positionContainter {
  12. public $red;
  13. public function __construct() {
  14. $this->red = new klasaWewnetrzna();
  15. }
  16. }
  17. ///////////////////////////////////////
  18. class mainObject {
  19. public $id;
  20. public $horizontalPositions;
  21.  
  22. public function __construct() {
  23. $this->horizontalPositions = new positionContainter();
  24. }
  25. }
  26. ///////////////////////////////////////
  27. // kilka razy...
  28. $objectsArray[sizeOf($objectsArray)] = new mainObject(); // tworzę tablicę obiektów
  29. ///////////////////////////////////////
  30. $objectsArray[0]->red->position[sizeOf($objectsArray[0]->red->position)]="cos"; //błąd
  31. print sizeOf($objectsArray[0]->red->position); //błąd
  32. print count($objectsArray[0]->red->position); //błąd
  33. // jeśli jednak wykonam to :
  34. $objectsArray[0]->red->position[0]=1; // OK
  35. print count($objectsArray[0]->red->boltPosition); // zwraca 1


Sprawdzałem i konstruktor się wykonuje, więc powinna być tworzona pusta tablica, której wielkość powinna wynosić "0".
Tego typu konstrukcja z uzyskiwaniem sizeOf jest mi potrzebna do budowania tablicy, sukcesywnego dodawania kolejnych indeksów
$tablica[sizeOf($tablica)] = "nastepny";

Jest szansa, że zaślepłem i po prostu nie widzę czegoś oczywistego, ale czuję, że jestem w kropce. Pomóżcie.
sh3d2
no po kolei.
zakladajac ze twoje $objectsArray to tablica obiektow mainObject, to wywolanie $objectsArray[0]->red nie ma sensu, to przeciez property red w klasie mainObject w ogole nie istnieje.

oczywiscie zawsze mogles tez cos pomieszac przy inicjalizacji tablicy objectsArray, nie brakuje ci czasem $objectsArray = array()?

btw dobra praktyka jest pisanie nazw klas z duzej litery (np MyCustomClass), kod jest wtedy o wiele czytelniejszy.
kchrapa
Witam smile.gif

Problem jest także w konstruktorze - tworzysz zmienną lokalną zamiast odwołać się do składowej obiektu poprzez $this.

class klasaWewnetrzna {
public $position;

public function __construct() {
// $position = array(0); // ZLE
$this->position = array(); //dobrze wink.gif
}

}


Pozdrawiam ,
Kacper Chrapa
janlgorski
Dziękuję Panowie, oczywiście oba wytknięte błędy przyczyniły się do zaistnienia problemu. Najbardziej kardynalnym było pominięcie jednego pola w hierarchii obiektów. Jednak byłem ślepy, no ale teraz mogę już pisać dalej!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.