Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]W funkcji nie działa metoda obiektu, a bez niej działa o co chodzi...
Forum PHP.pl > Forum > Przedszkole
cve
Witam to znów ja i pewnie znów z banalnym problemem, ale nie mogę sobie z nim tak prosto poradzić...
Mam taki kod:
  1. $role = 'guest';
  2. function menu($role) {
  3. for($i=0;$i<count($acl->$role->children());$i++) {
  4.  
  5. if($acl->$role->resource[$i]['label'] != '') {
  6. $navigation[$i]['href'] = $acl->$role->resource[$i]['name'];
  7. $navigation[$i]['label'] = $acl->$role->resource[$i]['label']; }
  8. }
  9. return $navigation;
  10. }

gdy próbuję wywołać:
  1. $role = 'guest';
  2. menu($role);

to dostaję komunikat:
  1. Fatal error: Call to a member function children() on a non-object

a kiedy wywołuję samą pętlę for z funkcji:
  1. $role = 'guest';
  2. for($i=0;$i<count($acl->$role->children());$i++) {
  3.  
  4. if($acl->$role->resource[$i]['label'] != '') {
  5. $navigation[$i]['href'] = $acl->$role->resource[$i]['name'];
  6. $navigation[$i]['label'] = $acl->$role->resource[$i]['label']; }
  7. }
  8. return $navigation;

to wszystko jest ok...
nie mam pojęcia od czego to zależy... bardzo proszę o jakąś pomoc...
Funkcja tak jakby 'opakowuje' zmienną $role, ale przecież to i tak jest cały czas string...
darko
a skąd funkcja ma wiedzieć, co to jest $acl questionmark.gif
marcio
  1. for($i=0;$i<count($acl->$role->children());$i++) {


Rozumiem ze w $acl->$role jest przechowywany obiekt?

$role to parametr funkcji jest takie pole w instacji klasy w zmiennej $acl?

Sprawdz http://php.net/manual/en/function.property-exists.php.

Bo nie wiem o co chodzi podaj tez kod $acl.


A jak nie to $acl nie ma zasiegu w srodku funckji to uzyj na samym poczatku.

  1. global $acl;

EDIT: oczywiscie tak jak mowi @drako w $acl mam nadzieje ze masz obiekt klasy do acl'a
darko
marcio jestem darko winksmiley.jpg
cve
Plik acl.xml ma taką strukture:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <acl>
  3. <guest>
  4. <resource name="/index/index" label="Strona główna" />
  5. <resource name="/index/onas" label="O nas" />
  6. <resource name="/index/kontakt" label="" />
  7. </guest>
  8. <user>
  9. <resource name="/produkty/index" label="Lista produktów" />
  10. </user>
  11. <admin>
  12. <resource name="/produkty/dodaj" label="Dodaj produkt" />
  13. <resource name="/produkty/edytuj" label="Edytuj produkt" />
  14. <resource name="/produkty/usun" label="Usuń produkt" />
  15. </admin>
  16. </acl>


w $acl przechowuję sobie ten plik acl.xml i stad mówie o obiekcie dla $acl->$role;

  1. $acl = simplexml_load_file('../config/acl.xml');
  2.  
  3. $role = 'admin';
  4.  
  5. function menu($role) {
  6. for($i=0;$i<count($acl->$role->children());$i++) {
  7.  
  8. if($acl->$role->resource[$i]['label'] != '') {
  9. $navigation[$i]['href'] = $acl->$role->resource[$i]['name'];
  10. $navigation[$i]['label'] = $acl->$role->resource[$i]['label']; }
  11. }
  12. return $navigation;
  13. }
darko
przekaż $acl do funkcji, bo nie widzi lub uczyń zmienną $acl globalną wewnątrz funkcji
cve
Jak zwykle pokazaliście, że warto na Was liczyć smile.gif dziękuję bardzo za pomoc.
Fajne to forum...
marcio
Cytat(darko @ 13.12.2009, 19:22:25 ) *
marcio jestem darko winksmiley.jpg


Sry smile.gif


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.