mcm*_*phy 4 php static namespaces global
在命名空间中创建全局函数(并从全局命名空间调用它)之间的区别是什么:
<?php
namespace MyNamespace {
function MyFunction($x, $y) {
return $x + $y;
}
}
namespace { //global code... in a new file
var_dump(MyNamespace\MyFunction(1,2));
}
Run Code Online (Sandbox Code Playgroud)
并创建一个静态类方法,并从全局命名空间调用?:
<?php
class MyClass {
public static function MyFunction($x, $y) {
return $x + $y;
}
}
var_dump(MyClass::MyFunction(1,2));
Run Code Online (Sandbox Code Playgroud)
是否有理由更喜欢一种方法而不是另一种方法?
是否有理由更喜欢一种方法而不是另一种方法?
(下面假设你要求/引用静态类方法和命名空间中的函数之间的区别)
历史上(在命名空间到达之前),人们被迫使用具有静态函数的类来不污染全局命名空间.这是您可能更频繁地遇到此方法的原因之一.
如果您需要访问类的数据,或者您想要在后代类中覆盖它们(所谓的"灵活性和功能性"),您可能更喜欢使用静态方法.
当你想要的只是......呃,嗯......一个函数时,你可能更喜欢命名空间函数.想想一些util,functional或collections函数,比如compose/partial,retry,filter/map/some/every等.你可能不希望在子类中覆盖它,对吧?它既不需要访问某些静态类成员.
但是,(命名空间)函数存在一个特别恼人的问题,即类不会受到影响.它是自动加载的.简而言之,目前无法自动加载功能.这是你可能在实践中经常遇到静态方法(当它们不一定需要时)的类的另一个原因.
| 归档时间: |
|
| 查看次数: |
950 次 |
| 最近记录: |