gpt4 book ai didi

PHP:类中的静态方法与命名空间中的全局函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:07:44 25 4
gpt4 key购买 nike

在命名空间中创建全局函数(和从全局命名空间调用它)有什么区别:

<?php
namespace MyNamespace {
function MyFunction($x, $y) {
return $x + $y;
}
}

namespace { //global code... in a new file
var_dump(MyNamespace\MyFunction(1,2));
}

并创建一个静态类方法,并从全局命名空间调用?:

<?php
class MyClass {
public static function MyFunction($x, $y) {
return $x + $y;
}
}

var_dump(MyClass::MyFunction(1,2));

有什么理由比另一种更喜欢一种方法吗?

最佳答案

Is there any reason to prefer one method over the other?

(下面假设您要问/指的是静态类方法和命名空间中的函数之间的区别)

历史上(在命名空间出现之前),人们被迫使用带有静态函数的类,以免污染全局命名空间。这是您可能更频繁地遇到此方法的原因之一。

如果您需要访问类的数据,或者如果您想要在后代类中覆盖它们(某些人所谓的“灵 active 和功能性”),您可能更愿意使用静态方法。

当您想要的只是……呃,咳咳……一个函数时,您可能更喜欢命名空间函数。想想一些 util、函数或集合函数,例如 compose/partial、retry、filter/map/some/every 等。您可能不希望它在子类中被覆盖,对吗?它也不需要访问某些静态类成员。

虽然(命名空间)函数有一个特别烦人的问题,但类不会受到影响。它是自动加载的。简而言之,目前有no way to autoload a function。这是您在实践中可能更频繁地遇到带有静态方法的类(当它们不一定需要)的另一个原因。

关于PHP:类中的静态方法与命名空间中的全局函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41749087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com