رفتن به مطلب

راهنمایی در کلاس Exception


پست های پیشنهاد شده

سلام دوستان

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

<?php
include_once '../common/common.php';


// First Section <------------>
function inverse($x){
    if($x == 0){
        throw new Exception('No Accepted Value');
    }
    return 1/$x ;
}


try{
    inverse(5);
    inverse(0);
}catch (Exception $error){
    echo 'An Error Occured ! Error Message: ' . $error->getMessage() . "<br>";
}

echo 'After This Block';


// Second Section <------------>
function toinverse ($a){
    if($a == 0){
        echo ' There is an error 2 ';
    }
    return 1/$x ;
}

 توی قسمت اول ( کامنت گذاشتم ) الان ما اومدیم گفتیم اگه x برابر صفر شد بیاد یه ارور ایجاد بشه. بعد توی دستور try..catch اومدیم گفتیم اگه استثنایی بود بره توی قسمت catch و یه متنی رو بخونه .

من سوالم اینجاست که چرا نمیایم مستقیم همون ارور رو توی دستور if نمایش بدیم ( مثل قسمت دوم ). یعنی به جای اینکه بیایم بگیم اگه x صفر بود --> ارور، اگه ارور بود --> متن ارور ( دستور catch) خب بیایم بگیم اگه صفر بود --> متن ارور .

برای چی یه قسمت اضافی ( اون exception ) رو بیخودی اون وسط کدهای اضافه میکنیم؟

امیدوارم منظورم رو فهمیده باشید :)

ممنون

 

لینک به ارسال

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

اما اگه منظورتون اینه که بلاک ترای کچ به چه دردی می خوره، جواب اینه که گاهی اوقات قراره محاسباتی یا اتصالی پیش بیاد که نتیجش قطعی نیست. یعنی چی؟ مثلا الان میدونید فقط اگر x برابر 0 باشه خطاست. اما حالا فرض کنید نمیدونید مقدار x از کجا اومده. مثلا کاربر ممکنه حروف الفبا یا هرچیز دیگه ای وارد کنه. در این صورت 1/x ام، ممکنه مثلا خطای وارنینگ یا فتال ارور بده، در این صورت به جای شرط گذاشتن برای مقدار x که چیا نباشه، راحت میشه محاسبه رو توی ترای کچ انجام داد و مطمئن شد که خطا نمیده. و اروری به کاربر نشون داده نمیشه که آدرس پوشه های سرور هم توش باشه! (به جاش اون پیام ما نشون داده میشه)

مثال دیگه زمانیه که قراره ارتباط با یه سرور دیگه برقرا کنیم. مثلا زمانی که می خوایم به سرور مای اس کیو ال وصل بشیم. نمیدونم الان سروری که موجود در آینده هم در حال اجرا هست یا نه. مثلا ممکنه سرور مای اس کیو ال به خاطر یه دلیلی از دسترس خارج بشه که در این صورت خطایی به کاربر نشون داده میشه که مدیریت شده نیست. معمولا توی این جور جاها از بلاک try .. catch استفاده میشه.

موفق باشید.

لینک به ارسال
در 7 دقیقه قبل، فرحان گفته است :

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

اما اگه منظورتون اینه که بلاک ترای کچ به چه دردی می خوره، جواب اینه که گاهی اوقات قراره محاسباتی یا اتصالی پیش بیاد که نتیجش قطعی نیست. یعنی چی؟ مثلا الان میدونید فقط اگر x برابر 0 باشه خطاست. اما حالا فرض کنید نمیدونید مقدار x از کجا اومده. مثلا کاربر ممکنه حروف الفبا یا هرچیز دیگه ای وارد کنه. در این صورت 1/x ام، ممکنه مثلا خطای وارنینگ یا فتال ارور بده، در این صورت به جای شرط گذاشتن برای مقدار x که چیا نباشه، راحت میشه محاسبه رو توی ترای کچ انجام داد و مطمئن شد که خطا نمیده. و اروری به کاربر نشون داده نمیشه که آدرس پوشه های سرور هم توش باشه! (به جاش اون پیام ما نشون داده میشه)

مثال دیگه زمانیه که قراره ارتباط با یه سرور دیگه برقرا کنیم. مثلا زمانی که می خوایم به سرور مای اس کیو ال وصل بشیم. نمیدونم الان سروری که موجود در آینده هم در حال اجرا هست یا نه. مثلا ممکنه سرور مای اس کیو ال به خاطر یه دلیلی از دسترس خارج بشه که در این صورت خطایی به کاربر نشون داده میشه که مدیریت شده نیست. معمولا توی این جور جاها از بلاک try .. catch استفاده میشه.

موفق باشید.

بله این یک کد آموزشی هست .

ممنون بابت توضیحات مفید و کاملتون. متوجه منظورتون شدم.

پس خود کلاس exception به چه دردی میخوره. وقتی از این کلاس استفاده میکنیم خیلی اطلاعات حساس مثل آدرس فایل و ... به بیرون درز میکنه که !

لینک به ارسال

وظیفه اون کلاس مدیریت خطاها هست. به عنوان مثال همون طور که توی کدتون هست و میبینید متود message اون کلاس صدا زده شده تا پیغام خطا به کاربر نشون داده بشه.

عملکرد بلوک try..catch به این صورته که شما دارید میگید سعی کن این کار رو انجام بدی و اگر نتونستی هر خطایی رخ داد توسط این کلاس Exception اون رو هندل کن.

خطاها به اون کلاس ارسال میشه و اون کلاس خطایی که پیش اومده توسط php رو استخراج میکنه و به شما (برنامه نویس) میده.

کلاس Exception یه کلاس پیشفرض توی php هست که شما میتونید توی پروژه خودتون اون رو گسترش بدید و توی بلاک try..catch خودتون از نسخه توسعه یافته خودتون استفاده کنید. که در این صورت مثلا میتونید توضیحات خطاها رو بیشتر کنید.

اگر موضوع براتون جالبه میتونید فریم ورک های php رو نگاه بندازید که چطوری کلاس Exception رو گسترش دادنه.

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...