将函数名与类配对是否被认为是不好的做法?
例如在kohana,我可以做以下事情。
function Model($a,$b){
return new Model($a,$b);
}
然后我可以删除所有对new的引用,不必创建$ temp变量,也不会出现工厂混乱。
$temp = new Model('book');
$book=$temp->where('title','=','name')->find();
或者
$book = Model::factory('book')->where('title','=','name');
要
$book = Model('book')->where('title','=','name');
我知道全球污染很严重,起初看起来有点模糊,但它有它的好处。
我的意思是如果其他人定义了一个与该类无关的函数会更加混乱,为什么不使用该函数呢?
例如:
$book = new Model('book');
// looks so close to the above, it's scary
$book = Model('book');
其他优点或缺点?
答案 0 :(得分:1)
偶尔这样做。它有时可以使代码更具可读性。
这叫做工厂程序。但如果它们不那么浅薄则最有意义。例如,如果依赖于参数,这样的方法可能会返回不同的对象(替代占位符/存根对象):
class User { ... }
function User($id) {
return ($id < 0) ? new PlaceholderUser() : new User($id);
} // or another *stub object* to support the application flow
但当然你可以使用它来获得更好的外观。它基本上比普通的静态工厂方法更清洁。但我会为你真正使用很多的对象保留这样的包装函数。使用每个现有类的包装调用来填充函数作用域是没有意义的。
这里常见的批评是:没有经验的开发人员很容易被没有new
的对象实例化混淆。 (不确定这是否属实。但在这种情况下经常会这样说。)
答案 1 :(得分:0)
这就是构造函数在PHP v5之前的工作方式(即,不是将它们命名为“__construct”),所以你可能不希望这样做。
(编辑:误解了你的问题,无视。我没有发现该功能是在全球范围内定义的。)
答案 2 :(得分:0)
也许有人可以对这些特点有所了解,除了允许丑陋的黑客外,它们似乎对我没有任何好处。
我强烈反对使用这些技术。我从未见过PHP书(或官方参考)明确提到标识符的这种“冲突”。 (如果我错了,请纠正我),但我认为这并不常见。正如马里奥已经指出的那样,我认为这是令人困惑和误导的。
我希望Model()
函数实际上可以做一些事情,而且我很恼火只是去了解它的定义,发现有人懒得使用new
和变量!< / p>