为什么最后一个与命名空间 class 同名的方法在 PHP 5.3.3 中不被视为构造函数?
Why is the last method with same name of the namespaced class not considered a constructor in PHP 5.3.3?
PHP 的历史表明 PHP 的旧版本使用 class 名称作为相同 class.[=17 的构造函数的方法=]
PHP 5.3.3 文档说:
Methods with the same name as the last element of a
namespaced class name will no longer be treated as constructor. This
change doesn't affect non-namespaced classes.
示例:
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()
不被视为构造函数?这背后的原因是什么?谁能告诉我吗?
关于为什么此规则适用于命名空间 classes
与 non-namespaced
,PHP 5.3
引入了命名空间。如果您是从较旧的 PHP
版本升级,您将需要照顾 non-namespaced classes,可能会使用旧式创建构造函数的方式。
他们想要强调您是在现代 PHP
原则下开发的,并且您也在使用新的约定。 PHP
目前致力于完全删除 old-style 构造函数,我们已经看到它们在 PHP 7
中已被弃用,并将在未来的版本中删除。
最后,完全放弃此约定的原因是它更 error-prone。使用 DRY 原则,如果在重构时更改 class 名称,而忘记更改构造函数的名称,则可能会产生微妙的 not-so-subtle 影响。
如果您正在扩展一个 class 并想调用它的构造函数,那么如果它们的父 class 的名称发生变化,它也会更 error-prone。进一步阅读:
和
.
PHP 的历史表明 PHP 的旧版本使用 class 名称作为相同 class.[=17 的构造函数的方法=]
PHP 5.3.3 文档说:
Methods with the same name as the last element of a namespaced class name will no longer be treated as constructor. This change doesn't affect non-namespaced classes.
示例:
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()
不被视为构造函数?这背后的原因是什么?谁能告诉我吗?
关于为什么此规则适用于命名空间 classes
与 non-namespaced
,PHP 5.3
引入了命名空间。如果您是从较旧的 PHP
版本升级,您将需要照顾 non-namespaced classes,可能会使用旧式创建构造函数的方式。
他们想要强调您是在现代 PHP
原则下开发的,并且您也在使用新的约定。 PHP
目前致力于完全删除 old-style 构造函数,我们已经看到它们在 PHP 7
中已被弃用,并将在未来的版本中删除。
最后,完全放弃此约定的原因是它更 error-prone。使用 DRY 原则,如果在重构时更改 class 名称,而忘记更改构造函数的名称,则可能会产生微妙的 not-so-subtle 影响。
如果您正在扩展一个 class 并想调用它的构造函数,那么如果它们的父 class 的名称发生变化,它也会更 error-prone。进一步阅读:
和
.