کنترل وجود یک متد در کلاس
سلام چجوری میتونم تو شرط چک کنم که آیا متدی در کلاس هست یا خیر و اگر نیست پیغام مناسب بده؟
میخوام در کد زیر بگم اگه کلاسی پیدا شد ولی متدی که در url وارد شد پیدا نشد پیغام مناسب بده
در کد زیر باید چجوری بگم؟
و همینطور میکنم کنترل کنم که اگه پارامتری در url صدا زده شد و در متد نبود پیغام مناسب براش چاپ شه
ممنون میشم راهنمایی کنید
$controllerClassName = ucfirst($controller) . 'Controller';
$controllerInctanse = new $controllerClassName();
call_user_func_array(array($controllerInctanse, $method), $params);
$controllerClassName = ucfirst($controller).'Controller'; // require_once controllerFile $controllerInstance = new$controllerClassName();
if(!method_exists($controllerInstance, $method))
throw new Exception("Action '{$method}' not found in '{$controller}' controller.");
آقا یه سوال دیگه حالا یه لول رفتم بالا تر میخوام چک کنم که اگه متد پیدا شد ولی همچین پارامتری توش نیست باید از چه function اده کنم؟
یجور پارامتر های یه متد رو بررسی کنم
// This will create an object that is the definition of your object $f = new ReflectionMethod($instance_of_object, $method_name); $args = array(); // Loop through params foreach ($f->getParameters() as $param) { // Check if parameters is sent through POST and if it is optional or not if (!isset($_POST[$param->name]) && !$param->isOptional()) throw new Exception("You did not provide a value for all parameters"); if (isset($_POST[$param->name])) $args[] = $_POST[$param->name]; if ($param->name == 'args') $args[] = $_POST; } $result = call_user_func_array(array($instance_of_object, $method_name), $args);
بجای $_POST میتونی از متغیر params استفاده کنی که قبلا پارامترهارو در اون ریختی.
پارامترهایی که مقدار اولیه دارن ، isOptional مقدار true برمیگردونه و اگر مقار اولیه نداشته باشن ، پس با توجه به کد بالا ، باید حتما مقداری ارسال شده باشه.
با سلام .
پاسخ های آقا محسن واقعا کامل و عالی بود خودمم یاداشت کردم روش های ایشون رو ولی یه روشی هم وجود داره که خودم زیاد استفاده کردم . خیلی هم راحته :)
public function __call($name, $arguments){
// echo "this page << ". $name. " >> note find in website .";
//البته اطلاعات name , arguments رو استفاده کنی که و بعد کاربر رو به صفحه 404 بفرستید
View::adminRenderPartial("/404/404.php");
}
تابع __call یکی از توابع خاص php هست که اگه متدی در کلاس شما پیدا نشه این متد فراخوانی میشه و دو تاپارامتر $name و $arguments داره که $name همون اسم متدی هست که کاربر شما فراخوانی کرده و $arguments هم پارامتر هایی هست که برای متد وارد شده است که یه آرایه هست .
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .