PDA

View Full Version : خصوصیات جدید در PHP 5.5



WOLF_MEHRDAD
شنبه 14 اردیبهشت 1392, 19:38 عصر
داشتم وبلاگ یه برنامه نویس خارجی رو چک میکردم یک دفه چشمم خورد به این مطلب


نمونه هاش اضافه شدن finally بود که به نظر خیلی جالب میومد.
لینک خبر :

http://johnsquibb.like97.com/blog/read/five-new-features-coming-in-php-5-5

لینک منبع :

http://php.net/archive/2013.php#id2013-04-11-1

engmmrj
شنبه 14 اردیبهشت 1392, 19:52 عصر
finay چه کاری انجام میده ؟

try { throw new \Exception('Error!'); } catch (\Exception $e) { echo 'Error message: ' . $e->getMessage(); echo "\n"; } finally { echo 'Finally block hit'; echo "\n"; }

ravand
شنبه 14 اردیبهشت 1392, 21:35 عصر
این بحثی رو که شما مطرح کردید رو میگن استثنا .
در كد بالا try سعي ميكنه كد رو اجرا كنه و در قسمت catch ميگه در صورت بروز خطا در اجراي كد يك استثنايي قائل شو و اجراي برنامه متوقف نشه و پيغام مورد نظر رو بده. اين استثنا باعث ميشه برنامه ي ما از حالت اجرا متوقف نشه و پيامي كه ما مي خوايم رو اجرا كنه.

engmmrj
یک شنبه 15 اردیبهشت 1392, 05:36 صبح
این بحثی رو که شما مطرح کردید رو میگن استثنا .
در كد بالا try سعي ميكنه كد رو اجرا كنه و در قسمت catch ميگه در صورت بروز خطا در اجراي كد يك استثنايي قائل شو و اجراي برنامه متوقف نشه و پيغام مورد نظر رو بده. اين استثنا باعث ميشه برنامه ي ما از حالت اجرا متوقف نشه و پيامي كه ما مي خوايم رو اجرا كنه.
منظور من finally بود نه try و catch

MMSHFE
یک شنبه 15 اردیبهشت 1392, 09:21 صبح
برای درک بهتر finally این مثال رو نگاه کنید:


function StoreDiv($x, $y, $con) {
$div = $x / $y;
mysql_query("INSERT INTO `table` (`x`,`y`,`div`) VALUES ('{$x}','{$y}','{$div}')", $con);
}

try {
$con = mysql_connect('localhost', 'root', '');
StoreDiv(5, 2, $con);
StoreDiv(4, 0, $con);
mysql_close($con);
}
catch (Exception $e) {
echo $e->getMessage();
}

در اینجا، چون فراخوانی دوم StoreDiv باعث خطای تقسیم بر صفر میشه، کنترل به بلاک catch منتقل میشه و درنتیجه دستور mysql_close اجرا نمیشه و اتصال باز میمونه. حالا این کد رو ببینید:


function StoreDiv($x, $y, $con) {
$div = $x / $y;
mysql_query("INSERT INTO `table` (`x`,`y`,`div`) VALUES ('{$x}','{$y}','{$div}')", $con);
}

try {
$con = mysql_connect('localhost', 'root', '');
StoreDiv(5, 2, $con);
StoreDiv(4, 0, $con);
}
catch (Exception $e) {
echo $e->getMessage();
}
finally {
mysql_close($con);
}

توی این کد میبینید که mysql_close داخل بلاک finally قرار گرفته. این بلاک درهرحال چه Exception تولید بشه چه نشه، اجرا میشه. درواقع بلاک finally میگه دستورات بلاک try رو اجرا کن، اگه خطا تولید نشد، این دستوراتی که من میگم رو هم اجرا کن اما اگه خطا تولید شد، بجای اجرای بقیه دستورات بلاک try، بلاک catch رو اجرا کن (تعریف بلاک catch) و بعد از اجرای بلاک catch، دستوراتی که من میگم رو اجرا کن.
اگه بخوام ساده بگم، اینطوریه که: هرموقع خواستین دستور یا دستوراتی، چه توی بلاک try خطا تولید شد، چه نشد، درهرحال اجرا بشن، اون رو توی بلاک finally بگذارین.

ravand
یک شنبه 15 اردیبهشت 1392, 09:35 صبح
میگم . من فکر میکنم این روش به درد جلوگیری از اخطار mysql هم میخوره . مثلا هکر یه سری دستور وارد میکنه که mysql اخطار بده و از اخطار ها برای هک سایت استفاده کنه ولی وقتی ما اخطار رو تعیین میکنیم دیگه اون اخطار دلخواه هکر رو نمیده. نظر شما چیه؟ :متفکر:

siavashsay
یک شنبه 15 اردیبهشت 1392, 09:40 صبح
آره - ایده جالبی بود راوند جان :)
اما خوب در نهایت نمیشه ریسک کرد و همیشه باید error_reporting بسته باشه :)

engmmrj
یک شنبه 15 اردیبهشت 1392, 12:43 عصر
PHP 5.5 که هنوز نسخه اصلیش نیومده ، الان نسخه beta موجود است .
منبع : PHP.Net (http://www.php.net/)

colors
یک شنبه 15 اردیبهشت 1392, 21:40 عصر
البته این هاستینگهای فعلی هم, فعلا 5.4 رو ساپورت نمیکنن, چه برسه به 5.5

navid3d_69
یک شنبه 15 اردیبهشت 1392, 22:55 عصر
5.5 بزرگترین تغییرش deprecated شدن Mysql هست که این خیلی خوب هست که با pdo یا mysql کار کنیم ولی همین باعث میشه خیلی از هاستینگ ها دیر به 5.5 برن