Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: is_callable VS __call
Forum PHP.pl > Forum > PHP > Object-oriented programming
Gligamesh
Jestem zmęczony po 4 piwkach więc za błędy wybaczcie.

mam sobie taki przykład
  1. <?php
  2. class content
  3. {
  4. function __call($name,$params)
  5. {
  6. $elements = array(
  7. 'home'=>array(),
  8. 'imprezy'=>array()
  9. );
  10.  
  11. if(!isset($elements[$name])) {
  12. reutrn flase;
  13. }
  14.  
  15. }
  16. }


jak mam odpytać tego magika __call czy on tak ma $name czy nie, nie ma ? Próbołwame na rużne sposoby i odpowiedż zawsze była zła. Macie jakieś pomysły na to ?
mstraczkowski
Może lepiej spróbuj zapytać ponownie jutro wink.gif bo na razie ciężko zrozumieć co masz na myśli.

Pozdrawiam
Adi32
  1.  
  2. <?php
  3. class content
  4. {
  5. function __call($name,$params)
  6. {
  7. $elements = array(
  8. 'home'=>array(),
  9. 'imprezy'=>array()
  10. );
  11.  
  12. if(!isset($elements[$name])) {
  13. reutrn flase;
  14. }
  15.  
  16. return true;
  17.  
  18. }
  19. }
nospor
reutrn flase;
Dziwne, że wogóle parser ci to przepuszcza....
Gligamesh
esz panowie czepiacie się smile.gif z palca pisałem a chyba każdy ma zdolność kojarzenia (jak widać tylko teoretycznie)
  1. <?php
  2. class content
  3. {
  4. function __call($name,$params)
  5. {
  6. $elements = array(
  7. 'home'=>array(),
  8. 'imprezy'=>array()
  9. );
  10.  
  11. if(!isset($elements[$name])) {
  12. return false;
  13. }
  14.  
  15. //robi coś
  16. }
  17. }

Lepiej ?

Chodzi o to by z zewnątrz sprawdzić czy '$name' jest i _call „zrobi coś” czy przerwie funkcje.
Dipter
Ja mimo wszystko nadal niedokładnie wszystko łapię, oczekujesz że metoda __call sprawdzi [zwróci] Tobie czy dany klucz istnieje i następnie wykona jakąś tam akcje, tak? Jeśli tak to ma to bardzo mało sensu i próbujesz coś przekombinować, co dokładnie chcesz osiągnąć?

Ad. pytania, to return zwróci wynik, więc nie ma możliwości żeby kod dalej się wykonał.
Gligamesh
chodzi o sprawdzenie czy _call zostanie przerwany czy też nie. To jest tylko przykład zastosowania.

Dla zobrazowania chce uzyskać taki sam efekt jak np. z użyciem is_callable() dla:
  1. class content {
  2. function home() {
  3.  
  4. }
  5. }


a czy przekombinowany ? Raczej do potęgi prosty routing
Crozin
1. Przede wszystkim nie używaj __call(). Nie spotkałem się jeszcze z sytuacją, gdzie pisząc nowy/świeży kod użycie __call miałoby jakiekolwiek uzasadnienie.
2. Powinieneś utworzyć sobie osobną metodę, która zwróci TRUE bądź FALSE w zależności od tego czy Twoja docelowa metoda będzie wstanie się wykonać. W tym przypadku będzie to:
  1. public function has($element) {
  2. return array_key_exists($this->elements, $element);
  3. }
Gligamesh
Ad 2 no o tym nie pomyślałem jest to jakieś wyjście z sytuacji (Ptaszek poszedł, dzięki !)

Prosty przykład zastosowania dla mapy statycznych stron
  1. function __call($name,$params) {
  2. $elements = array(
  3. 'dzial'=>array('plik szablonu', 'tytuł', 'id w menu', 'coś', 'opis'), //etc
  4. 'o-nas'=>array('o-nas.php','O nas', 5, true, 'O nas :)')
  5. );
  6.  
  7. $tpl = New template();
  8. $tpl -> assign('pageParams',array(
  9. 'page-title' => $elements[$name][1]
  10. $tpl -> render($elements[$name][0]);
  11. $tpl->display();
  12. }
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.