【问题标题】:Why is the last method with same name of the namespaced class not considered a constructor in PHP 5.3.3?为什么在 PHP 5.3.3 中与命名空间类同名的最后一个方法不被视为构造函数?
【发布时间】:2018-02-17 16:03:47
【问题描述】:

PHP 的历史表明,旧版本的 PHP 使用类名作为同一类的构造函数的方法。

PHP 5.3.3 文档说:

与 a 的最后一个元素同名的方法 命名空间的类名将不再被视为构造函数。这 更改不会影响非命名空间类。

示例:

namespace A;

 class classOne{
   public function methodOne(){}
   public function methodTwo(){}
   public function classOne(){} //Constructor
 }

 class classTwo{
   public function methodOne(){}
   public function methodTwo(){}
   public function classTwo(){} //Constructor
 }

所以根据这个文档,classOne()classTwo() 不被视为构造函数?这背后的原因是什么?谁能告诉我?

Reference Link

【问题讨论】:

  • 正如您所引用的,在命名空间类中它不再起作用(因为很长时间以来)。还是我看错了?

标签: php php-5.3


【解决方案1】:

关于为什么此规则适用于命名空间 classesnon-namespacedPHP 5.3 引入了命名空间。如果您从较旧的PHP 版本升级,您将需要照顾非命名空间类,可能使用创建构造函数的旧样式方式。

他们希望强制您在现代PHP 原则下进行开发,并且您也在使用新的约定。 PHP 在这一点上致力于完全删除旧式构造函数,我们已经看到它们在 PHP 7 中已被弃用,并将在未来的版本中删除。

最后,完全放弃这个约定的原因是它更容易出错。使用 DRY 原则,如果在重构时更改类名,忘记更改构造函数的名称,可能会产生微妙且不那么微妙的影响。

如果你正在扩展一个类并想要调用它的构造函数,如果它们的父类的名称发生变化,它也更容易出错。进一步阅读:

https://stackoverflow.com/a/29794401/823549

https://stackoverflow.com/a/217876/823549.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    相关资源
    最近更新 更多