2010-06-26 97 views
3

我正在阅读一些有关PHP的书(特别是Welling和Thomson的“PHP和MySQL Web Development”),我也是一名新的本科生。我有点好奇为什么作者决定选择两种不同的方法来终止函数的执行,例如PHP函数的返回值和例外

if (!$result) { 
    throw new Exception('Password could not be changed.'); 
} else { 
    return true; 
} 

对我来说,这似乎有点不一致,它会更有意义的返回false并让调用者检查被调用者的返回值并处理它。 PHP代码是否像这样常见?这是使用异常时预期的风格类型吗?

+0

这两个,威灵和汤姆森是着名的,他们没有线索。使用例外来验证用户输入是一个有风险的游戏。我只是限制它只用于系统错误 – 2010-06-26 03:50:58

+0

我认为是这样:)说实话,它似乎像使用'Exceptions'这样的事情有点沉重。 – SHC 2010-06-26 04:01:52

回答

2

是的,我同意它没有多大意义。要么通过返回值发出错误信号,要么发生异常。如果返回值始终为true(错误时会引发异常),那么您最好不要返回任何内容(在PHP中相当于返回NULL)。

1

当你看到PHP代码的时候,大部分时间都是关于编码它的人和他们特定的风格。

我看不出有关代码片段的不一致。例外是处理大多数语言错误的适当方式。他可以省略return语句,但我知道很多人觉得函数应该总是返回一个值。

+0

我觉得如果这个函数更加一致,那么返回值应该反映出来。与strcmp()返回< 0, 0, or > 0相同的方式,我觉得使用一致的返回值类型会更有意义。说实话,我们从来没有在大学里学到很多关于异常和异常处理的知识,所以我不确定这种编码风格是否应该在商业代码中应用。 – SHC 2010-06-26 01:35:39

+0

我们正在看的只是一个代码片段。判断如何处理执行流程是非常困难的。就个人而言,我不会在if语句中抛出异常。我不想用方括号包装执行代码会帮助它。在我看来,就错误处理而言,异常是因为try..catch块而要走的路。它使您有机会在执行之前纠正或抑制错误。 – 2010-06-26 01:55:36

1

它似乎纯粹是文体。我同意你的观点:返回true或false会更加一致,如果false意外或不可接受,调用代码应该抛出异常。

我不认为PHP社区已经完全制定了这样的行为约定,所以我不会说它是普遍的或不常见的。有这样的系统有一百种不同的方式是用PHP设计的。