Shi*_*bby 1 php netbeans code-hinting
我有一个功能,可以从数据库中加载事物列表并将其放入选择列表中。函数如下:(伪代码)
protected function Foo()
{
try {
get pdo instance
prepare statement
if (pdo query executes)
{
while (row = fetched rows)
{
do stuff with row
}
}
}
catch (PDOException $ex)
{
do error stuff here
}
}
Run Code Online (Sandbox Code Playgroud)
NetBeans提供了一条代码提示,提示它有太多行和太多嵌套块。我个人认为该功能应该可以接受。我还觉得将逻辑分解为较小的功能有点麻烦,但是为什么netbeans对我撒谎:)?
所以我的问题如下:
这是不好的逻辑还是我应该继续前进?我欢迎任何有关如何重新设计功能以适合NetBean约束的建议。
编辑:
我不会回答自己的问题,但是在这种情况下,不需要一个嵌套块。从具有try / catch块的单例类中检索pdo。我不需要在此函数中再次重复它,因为已经捕获了异常。
编辑2:
删除尝试捕获块就像抢劫彼得付给保罗一样。因此,如果在创建pdo实例时引发了异常,它不会停止执行。因此,我们尝试在未正确初始化的PDO对象上调用prepare语句。这迫使我们在prepare调用之前进行另一个测试,从而仅返回原始功能的重做。
根据我的经验,这意味着我的逻辑已经基本确立。如果我有话要说的话,我将回顾一下我的设计,然后holla。
再次感谢大家
您的代码是好的。NetBeans所建议的并不一定是您应该遵循的规则,如果您使用了PHPStorm之类的其他编辑器,甚至也不必担心(在PHPStorm中,您可以将编码样式设置为遵循PSR 1/2)。
您至少可以使用称为guard子句的方法消除一个嵌套:
protected function Foo()
{
try {
get pdo instance
prepare statement
if (! pdo query executes) return;
while (row = fetched rows)
{
do stuff with row
}
}
catch (PDOException $ex)
{
do error stuff here
}
}
Run Code Online (Sandbox Code Playgroud)
我看到人们有不同的偏好,因为没有硬性规定。例如,安东尼·费拉拉(Anthony Ferrara)个人认为他不应超出四个嵌套层次,而我个人认为四个层次太多。
重点是您应尽可能减少嵌套和行数。当您的方法太大(有时称为God方法)时,表示您做错了。
您可能还想看一下威廉·杜兰德(William Durand)撰写的这篇不错的文章,其中他讨论了杰夫·贝(Jeff Bay)在他的《ThoughtWorks Anthology》一书中提出的一些建议(实际上是9个)
另外,PHP Coding Standards Fixer是您的朋友。
所以: