Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] problem z wlasnymi klasami i tablica
mromar2
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 27.03.2006

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


Programuje obiektowo kilka lat w C++ i nie mialem nigdy wiekszych problemow
a tu w php mam tylko 2 klasy i nie moge dojsc o co chodzi

pierwsza klasa

  1. <?php
  2. class przedzial{
  3.  
  4. var $p;
  5. var $k;
  6. function przedzial() {
  7. $this->p=0;
  8. $this->k=0;
  9. }  
  10. function przedzial_($P, $K){
  11. $this->p=$P;
  12. $this->k=$K;
  13. }
  14. //i jeszcze inne fukcje
  15.  
  16. ?>


a potem mam druga klase w ktorej chce miec tablice elementow pierwszej klasy


  1. <?php
  2.  
  3. class rozmyty{
  4. var $tab;
  5. var $a;
  6. var $b;
  7. var $c;
  8. var $d;  
  9. function rozmyty(){
  10. $this->a=0; $this->b=0;
  11. $this->c=0; $this->d=0; 
  12. }
  13. function rozmyty__($a_,$b_,$c_,$d_){
  14. $i=0;
  15. for($j=0;$j<11;++$j){
  16. $this->tab[j]= new przedzial;
  17. $this->tab[j]->p=($i*($b_-$a_))+$a_;
  18. $this->tab[j]->k=($i*($c_-$d_))+$d_;
  19. $i=$i+0.1;
  20.  
  21. }
  22. //i jeszce inne funkcje
  23. }
  24. ?>


problem w tym ze gdy zrobie w ten sposob

  1. <?php
  2.  
  3. $d2= new rozmyty;
  4. $d2->rozmyty__(2,1,5,8);
  5.  
  6. echo "".$d2->tab[0]->k."<br>";
  7.  
  8. ?>


to nic sie nie pojawia bo $k pozostaje puste
tak jak by rozmyty__(2,1,5,8) nie zapisalo nic do tej tablicy tab


pojawia sie dopiero gdy zrobie tak

  1. <?php
  2.  
  3. $d=new przedzial;
  4.  
  5. $d2= new rozmyty;
  6. $d2->tab[0]=$d;
  7. echo "".$d2->tab[0]->k."<br>";
  8.  
  9. ?>


kto mi powie czemu ta tablica pozostaje pusta??
czego tu brakuje??
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. <?php
  2. $this->tab[j]= new przedzial;
  3. $this->tab[j]->p=($i*($b_-$a_))+$a_;
  4. $this->tab[j]->k=($i*($c_-$d_))+$d_;
  5.  
  6. ?>

zamien na:
  1. <?php
  2. $this->tab[$j]= new przedzial;
  3. $this->tab[$j]->p=($i*($b_-$a_))+$a_;
  4. $this->tab[$j]->k=($i*($c_-$d_))+$d_;
  5.  
  6. ?>
smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mromar2
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 27.03.2006

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


sadsmiley02.gif
a ja sie dwa dni w to patrzylem i szukalem bledu
porazka tiredsmiley.gif
musze sobie okulary sprawic cool.gif

a tak po za tym to czemu Zend mi to przepuscil bez ostrzezenia,
i na serwerze tez otwieralo sie bez bledu??
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




taki zapis tab[j] bedzie traktowany jako tab['j']. a to nie jest błąd tylko NOTICE, ktory zreszrtą jest wywalany:
Cytat
Notice: Use of undefined constant j - assumed 'j' in ...
trzeba miec tylko raportowanie ustawione odpowiednio.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mike
post
Post #5





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

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


Cytat(nospor @ 2006-03-27 16:39:36)
taki zapis tab[j] bedzie traktowany jako tab['j']. a to nie jest błąd tylko NOTICE, ktory zreszrtą jest wywalany:
Cytat
Notice: Use of undefined constant j - assumed 'j' in ...
trzeba miec tylko raportowanie ustawione odpowiednio.

No niby tak, ale to siedzi troche głębiej.

Zapis $tab[j] jest całkowicie poprawny (dlatego Zend nic nie mówił). Szukamy po prostu w tablicy $tab elementu o indeksie zdefiniowanym przez stałą j. Stała ta nie została wcześniej zdefiniowana więc php przy pierwszej próbie jej użycia wywala komunikat typu E_NOTICE oraz automatycznie tworzy tą stałą nadając jej wartość taką samą jaka jest jej nazwa. Dlatego wrażenie jest że jest to to samo co $tab['j']. A tak nie jest. To nadal jest tab[j]. Tylko tmy razem stała j jest już zdefiniowana.

Jest to swego rodzaju niuans.

Wyjściem z tej sytuacji nie jest odpowiednie ustawienie error_reporting, bo to jest ominięcie prolemu, zresztą bardzo złe, a nie jego rozwiązanie.

Rozwiązaniem jest pisanie nazw w apostrofach: $tab[ 'j' ]
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Dlatego wrażenie jest że jest to to samo co $tab['j']. A tak nie jest. To nadal jest tab[j]. Tylko tmy razem stała j jest już zdefiniowana.
to mialem na mysli, tylko źle to ubralem w slowa. a raczej skrócilem mysl winksmiley.jpg

Cytat
Rozwiązaniem jest pisanie nazw w apostrofach: $tab[ 'j' ]
nie, nie winksmiley.jpg rozwiązaniem jest pisanie: $tab[$j] tongue.gif oto tu wlasnie chodzilo winksmiley.jpg
---
No właśnie. Za daleko w teorię zabrnąłem. Chodziło mi o $tab[$j] tongue.gif
~mike_mech


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mromar2
post
Post #7





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 27.03.2006

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


a wiec dla potomnych szukających błędów w swych skryptach
najlepiej ustawic w php.ini

error_reporting = E_ALL


bo na ja szukaniu prostych błędów straciłem dwa dni sad.gif
a liczylem ze całe zlecenie zrobie w jeden
Go to the top of the page
+Quote Post
mike
post
Post #8





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

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


Cytat(mromar2 @ 2006-03-28 00:02:31)
error_reporting = E_ALL

Nie zawsze wystarczy.
Należy jeszcze upewnić się, że display_errors jest odpowiednio ustawione:
Kod
display_errors = On
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 Aktualny czas: 19.08.2025 - 19:00