آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

کنترل وجود یک متد در کلاس

Alireza  7 سال پیش  7 سال پیش
0 0

سلام چجوری میتونم تو شرط چک کنم که آیا متدی در کلاس هست یا خیر و اگر نیست پیغام مناسب بده؟

0 0
لینک (7 سال پیش)
0 0
اینو قبلا زدم ولی خطا میده (7 سال پیش)
+1 0
کدتو بذار تا متوجه بشم چه خطایی داره (7 سال پیش)
 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
Alireza  7 سال پیش
0 0

میخوام در کد زیر بگم اگه کلاسی پیدا شد ولی متدی که در url وارد شد پیدا نشد پیغام مناسب بده

در کد زیر باید چجوری بگم؟

و همینطور میکنم کنترل کنم که اگه پارامتری در url صدا زده شد و در متد نبود پیغام مناسب براش چاپ شه

ممنون میشم راهنمایی کنید

 $controllerClassName = ucfirst($controller) . 'Controller';
$controllerInctanse = new $controllerClassName();
call_user_func_array(array($controllerInctanse, $method), $params);
پاسخ به سوال 
محسن موحد  7 سال پیش
+2 0

$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.");
0 0
ممنون ولی بدردم نخورد . یعنی درست نشد (7 سال پیش)
0 0
اینم بگم با auto load کلاس ها لود شده دیگه نمیخوا require کنم (7 سال پیش)
0 0
دستور که همین method_exists هست! باید ببینید اصلا کلاس لود میشه؟ خطا تولید میکنه؟ اگر خطا تولید میکنه چه خطایی؟ باید ایراد رو از اسکریپتتون پیدا کنید. (7 سال پیش)
0 0
ببینین من وقتی تو url میزنم user/login میره و فایل رو اجرا میکنه و هیچ مشکلی هم ندارم ولی وقتی میزنم مثلا user/wgfewuigfui میگه در کلاس user همچین متدی پیدا نکرده . درواقع من دارم انواع خطا در routing رو کنترل میکنم (7 سال پیش)
0 0
این دستوری که من گفتم هم داره همین کارو میکنه! و اگر متدی وجود نداشت اکسپشن تولید میکنه. غیر از اینه؟ (7 سال پیش)
0 0
آقا دمت گرم حل شد - مشکل نوشتاری رودcontrollerInstance رو نوشته بودم controllerInstanse (7 سال پیش)
0 0
ممنون از کمکت (7 سال پیش)
پاسخ به سوال 
Alireza  7 سال پیش
0 0

آقا یه سوال دیگه حالا یه لول رفتم بالا تر میخوام چک کنم که اگه متد پیدا شد ولی همچین پارامتری توش نیست باید از چه function اده کنم؟

 

 

یجور پارامتر های یه متد رو بررسی کنم

پاسخ به سوال 
محسن موحد  7 سال پیش
+1 0

// 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 برمیگردونه و اگر مقار اولیه نداشته باشن ، پس با توجه به کد بالا ، باید حتما مقداری ارسال شده باشه.

0 0
میشه یکم درباره اسن سورس توضیح بدید؟ (7 سال پیش)
0 0
با استفاده از Reflection اطلاعاتی از قبلی پراپرتی ها و متد ها و ... از آبجکت میتونیم بگیریم. کلاس Reflection متدهای مختلفی داره که میتونی از سایت مرجع ببینی. اما اینجا براساس نیاز آبجکتی از ReflectionMethod ساختیم و متد getParameters رو اجرا کردیم. این متد رو var_dump یا print_r بگیر تا ببینی به چی اشاره میکنه! $instance_of_object اشاره به کلاس کنترلر میکنه که در کد شما ControllerInstance هست. داخل حلقه هم بررسی وجود پارامترهای اجباریست که اگر وجود داشتن در آرایه ای قرار بگیرن و اگر یکی از پارامتر های لازم وجود نداشت ، خطا تولید بشه. (7 سال پیش)
پاسخ به سوال 
reza piry ghadim  7 سال پیش
+1 0

با سلام .

پاسخ های آقا محسن واقعا کامل و عالی بود خودمم یاداشت کردم روش های ایشون رو ولی یه روشی هم وجود داره که خودم زیاد استفاده کردم . خیلی هم راحته :)

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 هم پارامتر هایی هست که برای متد وارد شده است که یه آرایه هست .

 


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .