Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [class][php5] Cannot use object of type miasto as
Forum PHP.pl > Forum > PHP
krysk
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?
mike
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.
krysk
Linia 12 to jest return...
mike
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.
krysk
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ć.
ebe
abstrahując od tego czy to obiekt czy nie global bije po oczach, raczej nie używaj tego,a obiekt przekaż jako parametr metody
dr_bonzo
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.
splatch
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
nospor
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
Sh4dow
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.
nospor
@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.
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.