我经常发现自己编写的函数看起来像:
public function foo($param): void
{
if($param) {
//do something
}
}
如果$param
变为false,则不执行代码。
这看起来是一种不好的做法,是否有关于如何避免这种编码的指导方针/模式?
答案 0 :(得分:1)
您可以改善这样的功能:
function foo($param='defaultValue')
{
if($param)
{
//do something
return true; // or something else
}
return false; // by default return false
}
通过这样做,如果将$param
评估为false
,则会使用return false
。
此外,如果您的函数位于类中,最佳做法是为该函数指定访问修饰符(public
,protected
,private
)。
答案 1 :(得分:1)
必须将类属性定义为public,private或protected。如果使用var声明,则该属性将被定义为public。
public function foo($param=null)
{
/* Condition while not empty then proceed */
if(!empty($param)) {
//do something
} else {
return false;
}
}
答案 2 :(得分:0)
这取决于你想对这个功能做什么。 但我的意见是你的条件应该在函数之外,例如
function foo() {
// doing something
}
然后
if ($params) {
foo();
}
它看起来更可定制
答案 3 :(得分:0)
如果一个函数是全有或全无条件,我首先得到else
条件 - 这样,如果$param
解析为false,函数会立即退出:
public function foo($param): void
{
if(!$param) {
return;
}
//do something
}
答案 4 :(得分:0)
我个人将此代码更改为:
function foo($param)
{
$param
&& (function () {
// Do code here.
})();
}
但是如果我想在其他地方调用内部函数并保持一切清洁,我可能会将其重构为:
function foo($param)
{
$param
&& bar();
}
function bar()
{
// Do code here
}
然后我会调整foo
的命名,以明确它是bar
的包装并重命名bar
,这样听起来就像它{39} ; s缺少包装器,可能是action_only
或action_without_foo
然后我也会在每个函数的dochints中写出来,在OOP中这将是一个私有方法,但是这并没有强制实现真正的隐私,请参阅:What is the point of OOP visibility in PHP when Closures and Reflections are available?,in事实上,在第一个例子中,函数内部的闭包更多是私有的"在技术层面