【发布时间】:2015-10-11 02:32:55
【问题描述】:
我一直在研究 PHP7 的新功能,并认为我可能会开始为我的项目准备它引入的新功能,例如标量类型提示。
我遇到的第一个问题是我在各种类中的构造函数。我有一些通用的委托人,它们的行为如下:
public function __construct($data = null) {
if (is_numeric($data)) {
$this->controller->createById($data);
}
elseif (is_array($data)) {
$this->controller->createByArray($data);
}
elseif (strlen($data) > 0) {
$this->controller->createByUrl($data);
}
}
为此方法引入类型提示当然会全方位抛出错误。
据我所知,PHP7 没有引入对多个构造函数的支持。有没有办法解决这个问题,或者这是语言的限制之一?
【问题讨论】:
-
不要为那个方法引入类型提示?
-
@N.B.是的,我知道这是一种可能性,但是从 OOP 的背景来看,我真的希望我的整个代码库都是真正面向对象的;)
-
编程和 OOP 专门用于解决问题。您没有需要通过编程解决的问题,您患有强迫症,现在您将强迫症误认为是语言限制。可悲的是,这不是语言限制。这只是你身边的一些刺,因为你有一些愚蠢的构造函数可以接受任何东西,现在你想通过 3 个构造函数输入提示值是什么。这真的是“OOP”吗?解决不了问题的复杂、愚蠢的代码?
-
@N.B.我不敢苟同,构造函数重载在 Java 和 C++ 等典型的 OOP 语言中非常常见。问这个问题是因为我想知道是否有某种方法可以超越我不知道的 PHP 限制,遗憾的是它不是。 OCD 与想要利用类型提示的新功能来更严格地键入 PHP 无关。
-
既然我想知道您要解决的问题是什么,您是否有机会编写伪php代码并重载构造函数(想象PHP支持它),以便更清楚如何 你会接近你想要的, 你要解决的问题是什么。如果我站在你的立场上,我会有不同的方法将某种类型的变量传递给创建更多东西的构造函数,但这就是我,我可能很傻、很老而且完全错误。介意与我们分享您的想法吗?