PDA

View Full Version : مشکل در استفاده از ساختار try , catch



bade saba
جمعه 01 اردیبهشت 1391, 15:04 عصر
سلام
من یه تابع نوشتم به شکل زیر اما مشکل اینه که وقتی فایل وجود نداره برنامه با ارور مواجه میشه با وجود اینکه من از ساختار try , catch استفاده کردم، سوالم اینه که چرا برنامه در صورت مواجه شدن با خطا در بخش try نمیره سراغ بخش catch و اون رو انجام بده


protected function readOneLine($strPath, $lineNumberList)
{
try
{
$fileObj = new SplFileObject($strPath);
$fileObj->seek($lineNumberList);
return $fileObj->current();
}
catch(Exception $e)
{
return readResponseType::error;
}
}

aghasoroush
جمعه 01 اردیبهشت 1391, 21:41 عصر
با سلام خدمت شما دوست عزیزم
ببینید من براتون یه مثال میزنم و رو همون پیش برین
شما باید یه دونه اکسپشن جدید بسازین و بعد اون رو بگیرینش


function test($a)
{
try
{
if ($a == 0)
throw new exception("error!");
return 2 / $a;
}
catch(exception $e)
{
echo $e->getmessage();
}
}
echo test(0);




البته شاید اگه ادامه ی کدتو ببینم بتونم بیشتر بهت راهنمایی کنم
موفق باشی...

bade saba
شنبه 02 اردیبهشت 1391, 00:40 صبح
با سلام خدمت شما دوست عزیزم
ببینید من براتون یه مثال میزنم و رو همون پیش برین
شما باید یه دونه اکسپشن جدید بسازین و بعد اون رو بگیرینش


function test($a)
{
try
{
if ($a == 0)
throw new exception("error!");
return 2 / $a;
}
catch(exception $e)
{
echo $e->getmessage();
}
}
echo test(0);




البته شاید اگه ادامه ی کدتو ببینم بتونم بیشتر بهت راهنمایی کنم
موفق باشی...

ممنون که پاسخ دادید اما این مثالی که شما میزنید از قبل مشخصه که ارورش چیه و شما با if اون خطا رو چک کردید که در این حالت اصلا نیازی به try catch نیست من هم اینجا میتونستم با file_exist مشکلم رو حل کنم اما مثلا برای استفاده از بانک اطلاعاتی که ممکنه انواع مختلفی از خطا رخ بده چه باید کرد؟؟؟ شاید بازم به همین شکل چک بکنید اما مثلا اگه بعد از چک کردنهای شما و در زمان انجام کاری اروری اتفاق بیوفته چی؟

aghasoroush
شنبه 02 اردیبهشت 1391, 15:16 عصر
ممنون که پاسخ دادید اما این مثالی که شما میزنید از قبل مشخصه که ارورش چیه و شما با if اون خطا رو چک کردید که در این حالت اصلا نیازی به try catch نیست من هم اینجا میتونستم با file_exist مشکلم رو حل کنم اما مثلا برای استفاده از بانک اطلاعاتی که ممکنه انواع مختلفی از خطا رخ بده چه باید کرد؟؟؟ شاید بازم به همین شکل چک بکنید اما مثلا اگه بعد از چک کردنهای شما و در زمان انجام کاری اروری اتفاق بیوفته چی؟

دوست عزیزم, به هر حال فرقی نمیکنه شما باید یه جایی اکسپشن رو تولیدکنی. وگر نه توی بلاک catch چه چیزی رو میخوای بگیری؟؟؟

شما php رو با زبان هایی مثل c# یا java مقایسه نکن که خداوند exception handling هستن.
توی php بیشتر توابع یا بهتره بگم همشون در صورت خطا یا فالس بر میگردونن یا یک پیغام خطا
اکسپشن تولید نمیشه عزیزم. البته تا اونجت که من میدونم. شمت بهتره که خودت اکسپشن تولید کنی

bade saba
شنبه 02 اردیبهشت 1391, 18:05 عصر
من به این صورت نوشتم و اون حالتی که میخاستم ایجاد شد یعنی وقتی فایل نیست به قسمت catch میره و وقتی فایل هست مقداری که باید رو بر میگردونه اما چیزی رو توش چک نکردم. این وضعیت در حالت کلی ایرادی نداره؟؟؟ منظورم اینه که ایراد ساختاری نداره؟؟؟


try
{
$fileObj = new SplFileObject($strPath);
$fileObj->seek($lineNumberList);
return $fileObj->current();

throw new Exception('-error-');
}
catch(Exception $e)
{
return readResponseType::error;
}