ƵµÀÖ±´ï - רÌâ - ÐÂÎÅ - »ù´¡ - ¸ß¼¶ - °²×° - ¼¼ÇÉ - Êý¾Ý¿â - ÊÖ²á - PHP - Linux - Java - MySQL - Apache - ÂéÀ±Ìà - ÀÇÃË - RailsÉçȺ - ËÑË÷ - ÏÂÔØ - ¿ªÔ´ - ÂÛ̳
PHP¿ª·¢×ÊÔ´Íø Ö÷Ò³>>PHP»ù´¡½Ì³Ì>> ÊղشËÎÄ | Êղر¾Õ¾ | ÉèΪÊ×Ò³

PHP 5.0Òì³£´¦Àí»úÖÆÉî¶È̽Ë÷(1)

À´Ô´:www.phpres.com ×÷ÕߣºAngelover ³ö´¦£ºwww.phpres.com 2007-8-2 19:14:03 ½øÈëÌÖÂÛ×é
¹Ø ¼ü ´Ê£º Éî¶È ̽Ë÷ »úÖÆ ´¦Àí Òì³£ Ò»¸ö Exception ´íÎó throw

±¾ÎÄÃæÏòÏ£ÍûÁ˽âPHP5Òì³£´¦Àí»úÖÆµÄ³ÌÐòÔ±¡£ÔĶÁ±¾ÎÄÄãÐèÒª¾ßÓÐÒ»¶¨ÃæÏò¶ÔÏó±à³ÌºÍPHP»ù´¡¡£

¡¡¡¡PHP5ÄÚ½¨µÄÒì³£ÀàÐèÒªÓÐÒÔϳÉÔ±·½·¨£º

__construct() ¹¹Ô캯Êý£¬ÐèÒªÒ»¸ö³ö´íÐÅÏ¢ºÍÒ»¸ö¿ÉÑ¡µÄÕûÐÍ´íÎó±ê¼Ç×÷²ÎÊý
getMessage() È¡µÃ³ö´íÐÅÏ¢
getCode()
³ö´íµÄ´úÂë
getFile() Òì³£·¢ÉúµÄÎļþ
getLine() Òì³£·¢ÉúµÄÐÐÊý
getTrace() ¸ú×ÙÒ쳣ÿһ²½´«µÝµÄ·Ïߣ¬´æÈëÊý×飬·µ»Ø¸ÃÊý×é
getTraceAsString() ºÍgetTrace()¹¦ÄÜÒ»Ñù£¬µ«¿ÉÒÔ½«Êý×éÖеÄÔªËØ×ª³É×Ö·û´®²¢°´Ò»¶¨¸ñʽÊä³ö

¡¡¡¡¿ÉÒÔ¿´³öÀ´£¬Exception ÀàµÄ½á¹¹ºÍPear_Error ºÜÏàËÆ¡£µ±ÄãµÄ½Å±¾ÖÐÓöµ½Ò»¸ö´íÎó£¬Äã¿ÉÒÔ½¨Á¢ÄãµÄÒì³£¶ÔÏó£º

$ex = new Exception( "Could not open $this-£¾file" );

¡¡¡¡ExceptionÀàµÄ¹¹Ô캯Êý½«½ÓÊÜÒ»¸ö³ö´íÐÅÏ¢ºÍÒ»¸ö´íÎó´úÂë¡£

¡¡¡¡Ê¹Óà throw¹Ø¼ü×Ö

¡¡¡¡½¨Á¢Ò»¸öException¶ÔÏóºóÄã¿ÉÒÔ½«¶ÔÏ󷵻أ¬µ«²»Ó¦¸ÃÕâÑùʹÓ㬸üºÃµÄ·½·¨ÊÇÓÃthrow¹Ø¼ü×ÖÀ´´úÌæ¡£throwÓÃÀ´Å׳öÒì³££º

throw new Exception( "my message", 44 );

¡¡¡¡throw ½«½Å±¾µÄÖ´ÐÐÖÐÖ¹£¬²¢Ê¹Ïà¹ØµÄException¶ÔÏó¶Ô¿Í»§´úÂë¿ÉÓá£

¡¡¡¡ÒÔÏÂÊǸĽø¹ýµÄgetCommandObject() ·½·¨£º

¡¡¡¡index_php5.php

£¼?php // PHP 5
require_once('cmd_php5/Command.php');
class CommandManager {
¡¡private $cmdDir = "cmd_php5";

¡¡function getCommandObject($cmd) {
¡¡¡¡$path = "{$this-£¾cmdDir}/{$cmd}.php";
¡¡¡¡if (!file_exists($path)) {
¡¡¡¡¡¡throw new Exception("Cannot find $path");
¡¡¡¡}
¡¡require_once $path;
¡¡if (!class_exists($cmd)) {
¡¡¡¡throw new Exception("class $cmd does not exist");
¡¡}

¡¡$class = new ReflectionClass($cmd);
¡¡if (!$class-£¾isSubclassOf(new ReflectionClass('Command'))) {
¡¡¡¡throw new Exception("$cmd is not a Command");
¡¡}
¡¡return new $cmd();
}
}
?£¾

¡¡¡¡´úÂëÖÐÎÒÃÇʹÓÃÁËPHP5µÄ·´Éä(Reflection)APIÀ´ÅжÏËù¸øµÄÀàÊÇ·ñÊÇÊôÓÚCommand ÀàÐÍ¡£ÔÚ´íÎóµÄ·¾¶ÏÂÖ´Ðб¾½Å±¾½«»á±¨³öÕâÑùµÄ´íÎó£º

Fatal error: Uncaught exception 'Exception' with message 'Cannot find command/xrealcommand.php' in /home/xyz/BasicException.php:10
Stack trace:
#0 /home/xyz/BasicException.php(26):
CommandManager-£¾getCommandObject('xrealcommand')
#1 {main}
thrown in /home/xyz/BasicException.php on line 10

¡¡¡¡Ä¬Èϵأ¬Å׳öÒì³£µ¼ÖÂÒ»¸öfatal error¡£ÕâÒâζ×ÅʹÓÃÒì³£µÄÀàÄÚ½¨Óа²È«»úÖÆ¡£¶ø½ö½öʹÓÃÒ»¸ö´íÎó±ê¼Ç£¬²»ÄÜÓµÓÐÕâÑùµÄ¹¦ÄÜ¡£´¦Àí´íÎó±ê¼Çʧ°ÜÖ»»áÄãµÄ½Å±¾Ê¹ÓôíÎóµÄÖµÀ´¼ÌÐøÖ´ÐС£

¡¡¡¡Try-catch Óï¾ä

¡¡¡¡ÎªÁ˽øÒ»²½´¦ÀíÒì³££¬ÎÒÃÇÐèҪʹÓÃtry-catchÓï¾ä—°üÀ¨TryÓï¾äºÍÖÁÉÙÒ»¸öµÄcatchÓï¾ä¡£Èκε÷Óà ¿ÉÄÜÅ׳öÒì³£µÄ·½·¨µÄ´úÂë¶¼Ó¦¸ÃʹÓÃtryÓï¾ä¡£CatchÓï¾äÓÃÀ´´¦Àí¿ÉÄÜÅ׳öµÄÒì³£¡£ÒÔÏÂÏÔʾÁËÎÒÃÇ´¦ÀígetCommandObject()Å׳öµÄÒì³£µÄ·½·¨£º

¡¡¡¡index_php5.php ºó°ë¶Î

£¼?php
// PHP 5
try {
¡¡$mgr = new CommandManager();
¡¡$cmd = $mgr-£¾getCommandObject('realcommand');
¡¡$cmd-£¾execute();
} catch (Exception $e) {
¡¡print $e-£¾getMessage();
¡¡exit();
}
?£¾

¡¡¡¡¿ÉÒÔ¿´µ½£¬Í¨¹ý½áºÏʹÓÃthrow¹Ø¼ü×ÖºÍtry-catchÓï¾ä£¬ÎÒÃÇ¿ÉÒÔ±ÜÃâ´íÎó±ê¼Ç“ÎÛȾ”Àà·½·¨·µ»ØµÄÖµ¡£ÒòΪ“Òì³£”±¾Éí¾ÍÊÇÒ»ÖÖÓëÆäËüÈκζÔÏó²»Í¬µÄPHPÄÚ½¨µÄÀàÐÍ£¬²»»á²úÉú»ìÏý¡£

¡¡¡¡Èç¹ûÅ׳öÁËÒ»¸öÒì³££¬tryÓï¾äÖеĽű¾½«»áÍ£Ö¹Ö´ÐУ¬È»ºóÂíÉÏתÏòÖ´ÐÐcatchÓï¾äÖеĽű¾¡£

¡¡¡¡Èç¹ûÒì³£Å׳öÁËȴûÓб»²¶×½µ½£¬¾Í»á²úÉúÒ»¸öfatal error¡£
»¶Ó­½øÈëPHP¿ª·¢×ÊÔ´ÂÛ̳ÌÖÂÛ¡£
¡¾ÊղشËÎÄ¡¿¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿¡¾¹Ø±Õ¡¿
Ïà¹ØÎÄÕÂ
ͼÎÄÍÆ¼ö
ÂÛ Ì³ ×Ê Ô´
PHP¿ª·¢×ÊÔ´Íø·Ü¶·Ä¿±ê
ÔĶÁÅÅÐУº
ÈÈÃż¼ÊõÎĵµ
×îÐÂͼÎĵµ
±¾Õ¾±à¼­ÍƼö:(±¾Õ¾¿ªÍ¨Delphi4PHP×¨Çø£¬»¶Ó­½øÈëÂÛ̳½»Á÷£¡)
±à¼©×î½ü¸üÐÂÎÄÕÂ
ÍøÕ¾ÔÞÖúÉÌ
ËÑË÷Äú¸ÐÐËȤµÄÄÚÈÝ
 
  ¡¡ÍøÕ¾Ê×Ò³¡¡- ¡¡ÍøÕ¾µØÍ¼¡¡- ¡¡ÍøÕ¾ºÏ×÷¡¡- ¡¡ÊÖ²áÖÐÐÄ¡¡- ¡¡Í¨ÓÃÍøÖ·¡¡- ¡¡ÍøÕ¾ÂÛ̳¡¡- ¡¡ÍøÕ¾Í¶¸å¡¡- ¡¡ÓÑÇéÁ´½Ó¡¡- ¡¡°ïÖúÖÐÐÄ
°æÈ¨ËùÓУºPHP¿ª·¢×ÊÔ´Íø © 2003-2008 ͨÓÃÍøÖ·:PHP×ÊÔ´Íø ºÏ×÷ýÌå: ÈüµÏÍøIT¼¼Êõ
»¥ÁªÍøÎ¥·¨ºÍ²»Á¼ÐÅÏ¢¾Ù±¨ÖÐÐÄ | ²»Á¼ÐÅÏ¢¾Ù±¨ÐÅÏä