PHP - Kilitler ve Yansıma problemlerini çözme

0 Cevap php

I needed to create dynamic breadCrumbs that must be realized automatically by the application. So I have the following structure in the URL for navagation: nav=user.listPMs.readPM&args=5

sonra ben tek amacı user.listPMs.readPM işlevini kendini tanımlamak için olacak bir fonksiyon dosyası olabilir:

file: nav/user.listPMs.readPM.php

function readPM($msgId)
{
 /*code here*/
}

Tabii ki bu bir sınıf Withing işlevini sarma veya ad kullanarak değilim beri küresel kapsamını yığılan biter. Burada iyi çözüm kuşkusuz, bunu Namespacing gibi görünüyor? Ama aynı zamanda başka bir düşündüm:

file: nav/user.listPMs.readPM.php

return function($msgId)
{
 /*code here*/
};

Evet, bu kadar basit, dosya sadece bir anonim işlev dönüyor. Ben zaten düzgün içeren adlı dosyayı beri, bir kullanıcı işlevi oluşturma ve henüz sadece gereksiz görünüyor adlandırmak zorunda - Ben onu adlandırma umurumda gerekmez, çünkü bu şaşırtıcı olduğunu düşünüyorum. Sonra endeksinde ben bu küçük kirli hile olurdu:

file: index.php

if($closure = @(include 'nav/'.$_GET['nav']))
{
 if($closure instanceof Closure)
 {
  $obj = new ReflectionFunction($closure);
  $args = explode(',',@$_GET['args']);
  if($obj->getNumberOfParameters($obj)<=count($args))
   call_user_func_array($closure,$args);
  else
   die('Arguments not matching or something...');
 } else {
  die('Bad call or something...');
 }
} else {
 die('Bad request etc.');
}

Hatta ekmek kırıntıları güzel sadece $ _GET ['nav'] değişkeni içindeki değer ayrıştırma tarafından ikincisi inşa edilebilir söz gerekmez.

Peki, sen ne düşünüyorsun, bu soruna daha iyi bir çözüm var mı? Eğer Kapaklar ve / veya Yansıma keşfetmek için başka bir yol bulduk?

0 Cevap