تالار گفتمان nCIS.ir

نسخه‌ی کامل: استفاده از یک تابع در کل صفحات MVC
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام دوستان من از MVC استفاده میکنم. مشکل اینجاست که تو هر صفحه ای که میخوام یه تابع استفاده بشه مجبورم اون تابع رو تو هر صفحه کنترلر بنویسم. میخواستم بدونم چاره ای هست که نخوام هی اونو تو هر صفحه کپی پیست کنم
کافیه تو صفحه ایندکس این کلاس رو include کنید و هرجا که خواستید با خیال راحت ازش بصورت زیر استفاده کنید.



class Container {

    private $methods = [];

    public function register($name, Closure $closure)
    {
        $this->methods[$name] = $closure->bindTo($this, get_class());
    }

    public function __call($name, array $args)
    {
        if (isset($this->methods[$name])) {
            return call_user_func_array($this->methods[$name], $args);
        }

        throw new BadFunctionCallException("'$name' does not exist.");
    }
    
}

$Container=new Container;
$Container->register('user', function() use ($Container)
{
   return "bgsrb88";
});

$Container->register('Send', function($message) use ($Container)
{
   return $message." ".$Container->user();
});
echo $Container->Send("Salam");
همانطور که اشاره شد یک کلاس تعریف کنید و تابع مورد نظرتونو داخلش تعریف کنید و برای استفاده ار آن راه بهتر اینه که از autoloader استفاده کنید تا نیاز به require کردن کلاس هم نداشته باشید. مثلا این دستوراتو توی index قرار بدهید. توی این مثال فرض شده کلاس ها داخل پوشه classes تعریف شدند :
spl_autoload_register(function ($class) {
    include 'classes/' . $class . '.class.php';
});