Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [class][php5] Cannot use object of type miasto as
krysk
post 21.09.2005, 22:09:47
Post #1





Grupa: Zarejestrowani
Postów: 146
Pomógł: 0
Dołączył: 20.04.2002
Skąd: Szczecin

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


Witam, zaczynam naukę obiektowego PHP5, na samym początku napotkałem już problemy - php zwraca błąd, które
  1. <?
  2. class miasto {
  3. public $id;
  4.  
  5. function __construct($id = 1){
  6. $this->id = $id;
  7. }
  8. // $miasto = mysql_fetch_array( sql("SELECT *, wojewodztwa.nazwa AS wojewodztwo, miasta.nazwa AS nazwa, FROM miasta, wojewodztwa WHERE `miasto.id`='". $this->id ."' AND miasta.wojewodztwo=wojewodztwa.id ") );
  9. //$miasto['wojewodztwo'] = 'aaa';
  10. //$miasto['nazwa'] = 'aaa';
  11. function sciezka(){
  12. global $miasto;
  13. return $miasto['wojewodztwo'] . ' / ' . $miasto['nazwa'] . '(' . $this->id . ')';
  14. }
  15.  
  16. }
  17. ?>


Zwraca mi błąd:
Kod
Fatal error: Cannot use object of type miasto as array in c:\wamp\www\class\miasto.class.php on line 12


Google nie wyrzucają żadnych istotnych informacji - pod jakim hasłem mogę szukać jakichkolwiek wskazówek?


--------------------
Krzysztof Wójcik
Zend Certified Engineer
Go to the top of the page
+Quote Post
mike
post 21.09.2005, 22:14:01
Post #2





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

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


Komunikat oznacza, że: Próbujesz użyć obiektu klasy miasto jako tablicy.
Nie możesz tego zrobić.
Napisz jeszcze która linijka z przedstawionego kodu jest tą 12-tą z komunikatu.
Go to the top of the page
+Quote Post
krysk
post 21.09.2005, 22:16:17
Post #3





Grupa: Zarejestrowani
Postów: 146
Pomógł: 0
Dołączył: 20.04.2002
Skąd: Szczecin

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


Linia 12 to jest return...


--------------------
Krzysztof Wójcik
Zend Certified Engineer
Go to the top of the page
+Quote Post
mike
post 21.09.2005, 22:22:51
Post #4





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

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


Prawdopodobnie zmienna $miasto to obiekt a Ty chcesz dostać sie do jego pól traktując go jako tablicę.

Żeby dostać się do pól wojewodztwo, nazwa musisz zrobić tak:
  1. <?php
  2. // ...
  3. return $miasto->wojewodztwo . ' / ' . $miasto->nazwa . '(' . $this->id . ')';
  4. // ...
  5. ?>


o ile to własnie w tym problem.
Go to the top of the page
+Quote Post
krysk
post 21.09.2005, 22:25:20
Post #5





Grupa: Zarejestrowani
Postów: 146
Pomógł: 0
Dołączył: 20.04.2002
Skąd: Szczecin

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


Nie, to jest tablica. smile.gif Cały kod jest wyżej, jak dla mnie to tam nie ma żadnych obietków wewnątrz klasy... Aczkolwiek z PHP5 to ja dopiero zaczynam, więc mogę się mylić.


--------------------
Krzysztof Wójcik
Zend Certified Engineer
Go to the top of the page
+Quote Post
ebe
post 21.09.2005, 22:35:52
Post #6





Grupa: Zarejestrowani
Postów: 150
Pomógł: 1
Dołączył: 23.01.2004

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


abstrahując od tego czy to obiekt czy nie global bije po oczach, raczej nie używaj tego,a obiekt przekaż jako parametr metody

Ten post edytował ebe 21.09.2005, 22:37:26


--------------------
Słyszałem, że macie tutaj jakieś takie php... fajne to, dobre to jest?
Go to the top of the page
+Quote Post
dr_bonzo
post 22.09.2005, 07:39:05
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Dla pewnosci daj print_r( $miasto ) lub var_dump( $miasto ) przed returnem.

Co do global: da sie wszysztko napisac bez uzywania tej konstrukcji, a poza tym jest to zaprzeczenie programowania obiektowego.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
splatch
post 22.09.2005, 09:25:14
Post #8





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Ja dodam, że używanie GLOBAL w metodach jakiejkolwiek klasy to na prawdę zły nawyk, którego powinno się unikać. Z tąd niedaleka droga do korzystania z klas jako grup funkcji, które praktycznie nie mają nic wspólnego...

GLOBAL w klasach i funkcjach mówimy stanowcze NIE

Ten post edytował splatch 22.09.2005, 09:26:07


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post
nospor
post 22.09.2005, 09:31:52
Post #9





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




Cytat
Nie, to jest tablica.  Cały kod jest wyżej, jak dla mnie to tam nie ma żadnych obietków wewnątrz klasy...
Caly kod jest powyżej... Hmmm. Tylko w tym kodzie, a i owszem tworzyż zmienną miast, ale jest ona :
1) wykomentowana, a co za tym idzie wogóle nie deklarowana
2) użyta poza jakąkolwiek funkcją.

poazatym miasto tak nazywa sie twoja klasa, a ze nigdzie nie ma zmiennej $miasto, wiec on moze bieże sobie to jaką obiekt tej klasy. Któtko mówiąc Twoj kod nie trzyma się kupy


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

"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
Sh4dow
post 22.09.2005, 11:39:58
Post #10





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

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


Cytat(nospor @ 2005-09-22 10:31:52)
... poazatym miasto tak nazywa sie twoja klasa, a ze nigdzie nie ma zmiennej $miasto, wiec on moze bieże sobie to jaką obiekt tej klasy. Któtko mówiąc Twoj kod nie trzyma się kupy

nospor nie wpadajmy w paranoje podobienst nazw, wychodzilo by z tego ze to bug w php a tego nie podejzewam.
Niech pokaze wynik var_dump($miasto) po linijce z global (brrrrr rzeczywiscie jakos dziwnie sie czuje to widzac) i po tym bedzie mozna okreslic co jest nie tak i przydalo by sie zobaczyc cala klase tak jak dziala a nie wyklomentowana bog wie gdzie i jak.
Problem jest nie w pelni przedstawiony i tyle.


--------------------
Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota
Zarządzaj swoim budżetem domowym
Go to the top of the page
+Quote Post
nospor
post 22.09.2005, 11:46:01
Post #11





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




@Sh4dow pewnie masz rację. Akurat to zdanie pisałem bez większego przekonania. Mówi że cały kod jest podany, więc smaruję względem tego, ale pewnie jak zwykle nie wszystko nam pokazano.


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

"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

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: 27.06.2025 - 13:50