Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> is_callable VS __call
Gligamesh
post
Post #1





Grupa: Zarejestrowani
Postów: 227
Pomógł: 0
Dołączył: 13.06.2003
Skąd: rykowice

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


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 ?

Ten post edytował Gligamesh 14.03.2013, 02:03:06
Go to the top of the page
+Quote Post
mstraczkowski
post
Post #2





Grupa: Zarejestrowani
Postów: 273
Pomógł: 52
Dołączył: 3.02.2013
Skąd: Przemyśl

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


Może lepiej spróbuj zapytać ponownie jutro (IMG:style_emoticons/default/wink.gif) bo na razie ciężko zrozumieć co masz na myśli.

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





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

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


  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. }


Ten post edytował Adi32 14.03.2013, 09:01:49
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




reutrn flase;
Dziwne, że wogóle parser ci to przepuszcza....
Go to the top of the page
+Quote Post
Gligamesh
post
Post #5





Grupa: Zarejestrowani
Postów: 227
Pomógł: 0
Dołączył: 13.06.2003
Skąd: rykowice

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


esz panowie czepiacie się (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
Dipter
post
Post #6





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 28.11.2010
Skąd: Kraków

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


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ł.
Go to the top of the page
+Quote Post
Gligamesh
post
Post #7





Grupa: Zarejestrowani
Postów: 227
Pomógł: 0
Dołączył: 13.06.2003
Skąd: rykowice

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


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

Ten post edytował Gligamesh 14.03.2013, 16:26:20
Go to the top of the page
+Quote Post
Crozin
post
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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. }
Go to the top of the page
+Quote Post
Gligamesh
post
Post #9





Grupa: Zarejestrowani
Postów: 227
Pomógł: 0
Dołączył: 13.06.2003
Skąd: rykowice

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


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. }


Ten post edytował Gligamesh 14.03.2013, 17:14:29
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 10:42