PDA

View Full Version : سوال: فراخوانی توابع از url



h_a_m_i_d
چهارشنبه 02 بهمن 1392, 16:31 عصر
با عرض سلام و خسته نباشید خدمت دوستان عزیز و گرامی

ببخشید یک سوال داشتم ک میخواستم با راهنمایی شما دوستان عزیز به جوابش برسم و ممنون میشم اگه جوابش رو بهم بدین

خوب به طور مثال من در حال طراحی یک cms هستم و این cms هم دارای کلاس ها و توابع گوناگون هست
من میخوام به طور مثال وقتی url من به شکل زیر شد
cms.ir?action=loginclass&func=register

خودش وارد کلاس loginclass بشه و تابع register رو اجرا کنه البته با دستور if و ... میشه ولی حتما باید یک روش ساده تر داشته باشه برای اینکار

ممنون میشم راهنماییم کنید
پیشاپیش تشکر:قلب:

Veteran
چهارشنبه 02 بهمن 1392, 17:01 عصر
<?php
class loginclass{
public function register(){
echo "register";
}
}
if(isset($_GET['action'],$_GET['func'])){
$obj=new $_GET['action'];
$obj->$_GET['func']();
}
?>


البته این تنها یک مثال بود،قطعا راه کاره خوبی نیست،شما باید از Router ها استفاده کنید(کلاس Router بنویسید) که Url رو پردازش بکنن و فایل مورد نظر رو در صورت وجود include بکنن و ادامه کار

foreach
چهارشنبه 02 بهمن 1392, 17:11 عصر
همونطور که گفتن باید از روتر ها استفاده کنید
نمونه


<?php
$classes = array(
'login' => 'classes/loginclass.php',
);
$class = 'login';
$method = 'index';
$params = array();

$route = (isset($_GET['r']) ? $_GET['r'] : '');

$parts = explode('/',$route);

if(!empty($parts[0]))
$class = $parts[0];

array_shift($parts);

if(!empty($parts[0]))
$method = $parts[0];

array_shift($parts);

if(!empty($parts))
$params = $parts;

if(!isset($classes[$class]))
die('not found class');

include_once($classes[$class]);
$obj = new $class();

if(!method_exists($obj,$method))
die('not found method');

call_user_func_array(array($obj,$method),$params);