aessjz
try
{
if($passwd!=$passwd2)
{
throw new exception('the passwords you entered do not same');
}
if(strlen($passwd) <5)
{
throw new exception('your password must be at least 6 characters long');
}
----------A1----------
register($username,$email,$passwd)
$_SESSION['valid_user'];=$username;
do_html_header('registation successful');
echo "your registration was successful. go to the members page";
do_html_url("member.php","go to members page");
----------A1---------
}
catch (exception $e)
{
do_html_header(problem);
echo $e->getmessage();
do_html_footer();
exit;
}
我有几个问题
1。try中有多个throw,请问会全部抛出吗,还是出现一个异常后,终止下面的异常判断?
2。如果有异常,那么try中A1 部分的代码还会执行吗?
3。catch中的 $e是exception类的一个对象,那这个对象又是在那里创建的,难道说“(exception $e)“这样就可以创建对象了吗?
4。如果没有异常,那么是不是就不执行catch,这样就相当于是个判断。
我看得是一本MYSQL+PHP的书,书里的这个章节将的不清楚,所以还有诸多不明白的地方,谢谢高人,问题很多,麻烦了
___________________________________________________________________
1.throw之后异常就会抛出,直接抛向catch (exception $e) 并执行其区块内的处理.
throw后面一直到catch之前的处理都会跳过。
2.参考1。
如果是你上面跑出的异常,就不会被执行
3.$e这个对象的实现,应该是在throw new exception('XXX');的时候被创建的。
4.可以这么理解,因为效果是相似的。
但是,异常的机制跟简单的if判断不同,它应该是由Zend引擎即时监视的。发上什么异常、之后怎么处理,都应该是由Zend引擎直接控制,理论上,要比在程序中判断错误的效率高。而且,实际的程序设计中,异常更容易管理。
5.try里面是正常处理,catch是被预见的异常处理,通过不同的Exception可以具体到不同异常的各个处理环节
6.异常就是正常之外的处理。
很多时候,正常与否是由程序员自己定义的。
例如,一个参数,如果是空那么就要抛出异常,但是根据情况的不同,也可以不抛出异常,具体情况具体定。
7.catch的排列顺序是有规律的,就是从小到大。
例如,IOException是Exception的子类,那么在排序的时候如下。
如上,throw new IOException();之后,就会跳入catch(IOException $e)的处理,但是,如果catch(IOException $e)里面没有提示的话,将不会进入catch(Exception $e)
但是,throw new Exception();之后,肯定进入catch(Exception $e)而不会光顾IOException
___________________________________________________________________
这种情况是直接向方法的上层抛异常。
也就是,具体的异常处理方法内不考虑,让使用方法的人确定。
这样可以让方法的使用更加灵活。
大多数底层类(如框架中的类)都有这样的处理。
异常的目的是告诉使用方法/类的程序员,用了之后会有什么样的异常发生。
这样,等到发生了异常之后,是用方就可以更容易控制程序的运行。
试想,倘若不用异常,而用返回值判断,那将是一件非常繁琐的事情。
PHP的语法不是很严密,没有一定OOP经验的人可能很难看出,
但是,这种在程序中定义异常的代码效率要比通过返回值判断错误与否高得多
try
{
if($passwd!=$passwd2)
{
throw new exception('the passwords you entered do not same');
}
if(strlen($passwd) <5)
{
throw new exception('your password must be at least 6 characters long');
}
----------A1----------
register($username,$email,$passwd)
$_SESSION['valid_user'];=$username;
do_html_header('registation successful');
echo "your registration was successful. go to the members page";
do_html_url("member.php","go to members page");
----------A1---------
}
catch (exception $e)
{
do_html_header(problem);
echo $e->getmessage();
do_html_footer();
exit;
}
我有几个问题
1。try中有多个throw,请问会全部抛出吗,还是出现一个异常后,终止下面的异常判断?
2。如果有异常,那么try中A1 部分的代码还会执行吗?
3。catch中的 $e是exception类的一个对象,那这个对象又是在那里创建的,难道说“(exception $e)“这样就可以创建对象了吗?
4。如果没有异常,那么是不是就不执行catch,这样就相当于是个判断。
我看得是一本MYSQL+PHP的书,书里的这个章节将的不清楚,所以还有诸多不明白的地方,谢谢高人,问题很多,麻烦了
___________________________________________________________________
1.throw之后异常就会抛出,直接抛向catch (exception $e) 并执行其区块内的处理.
throw后面一直到catch之前的处理都会跳过。
2.参考1。
如果是你上面跑出的异常,就不会被执行
3.$e这个对象的实现,应该是在throw new exception('XXX');的时候被创建的。
4.可以这么理解,因为效果是相似的。
但是,异常的机制跟简单的if判断不同,它应该是由Zend引擎即时监视的。发上什么异常、之后怎么处理,都应该是由Zend引擎直接控制,理论上,要比在程序中判断错误的效率高。而且,实际的程序设计中,异常更容易管理。
5.try里面是正常处理,catch是被预见的异常处理,通过不同的Exception可以具体到不同异常的各个处理环节
6.异常就是正常之外的处理。
很多时候,正常与否是由程序员自己定义的。
例如,一个参数,如果是空那么就要抛出异常,但是根据情况的不同,也可以不抛出异常,具体情况具体定。
7.catch的排列顺序是有规律的,就是从小到大。
例如,IOException是Exception的子类,那么在排序的时候如下。
- try{
- if(true){
- throw new IOException();
- }
- throw new Exception();
- }catch(IOException $e){
- }catch(Exception $e){
- }
但是,throw new Exception();之后,肯定进入catch(Exception $e)而不会光顾IOException
___________________________________________________________________
这种情况是直接向方法的上层抛异常。
也就是,具体的异常处理方法内不考虑,让使用方法的人确定。
这样可以让方法的使用更加灵活。
大多数底层类(如框架中的类)都有这样的处理。
异常的目的是告诉使用方法/类的程序员,用了之后会有什么样的异常发生。
这样,等到发生了异常之后,是用方就可以更容易控制程序的运行。
试想,倘若不用异常,而用返回值判断,那将是一件非常繁琐的事情。
PHP的语法不是很严密,没有一定OOP经验的人可能很难看出,
但是,这种在程序中定义异常的代码效率要比通过返回值判断错误与否高得多