Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] tablica wewnątrz klasy, Problem z użyciem sizeOf
janlgorski
post 13.10.2012, 08:41:42
Post #1





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

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
sh3d2
post 13.10.2012, 08:57:13
Post #2





Grupa: Zarejestrowani
Postów: 34
Pomógł: 11
Dołączył: 10.06.2011
Skąd: świdnica

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


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.

Ten post edytował sh3d2 13.10.2012, 09:01:14
Go to the top of the page
+Quote Post
kchrapa
post 13.10.2012, 09:01:55
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 3
Dołączył: 2.02.2010

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


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
Go to the top of the page
+Quote Post
janlgorski
post 13.10.2012, 09:59:50
Post #4





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

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


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!
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 - 08:10