SadraHkm

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

4 پست در این موضوع قرار دارد

سلام دوستان

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

<?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 ) رو بیخودی اون وسط کدهای اضافه میکنیم؟

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

ممنون

 

0

به اشتراک گذاری این پست


لینک به پست

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

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

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

موفق باشید.

2

به اشتراک گذاری این پست


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

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

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

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

موفق باشید.

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

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

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

0

به اشتراک گذاری این پست


لینک به پست

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

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

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

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

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

3

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری