gpt4 book ai didi

php - 如何使用 PHP Composer 定义私有(private)类路径?

转载 作者:行者123 更新时间:2023-12-03 22:57:39 25 4
gpt4 key购买 nike

是否可以为只能由包本身(不能由包含它的其他包)加载的类/接口(interface)定义单独的 PSR-0/4 路径?

这个想法是它会阻止其他包错误地使用应该是该包私有(private)的类。

我意识到他们总是可以手动包含该文件,并且类加载器是全局的。目标不是阻止他们使用该类,而是明确表示他们现在不应该直接访问该类,或者如果包的 API 发生更改,他们不应该直接访问该类。

用例:

假设包中有一个 Person 类(已发布并使用)。当包的新版本到达时,我们不再希望他们调用 new Person,而是使用 PersonFactory (因为它必须与要创建的人一起设置一些其他内容)调用者无需担心)。

是的,您可以在更改日志中记录这一点。然而 IDE 和静态分析器将无法报告这一点。只有当未正确初始化的 Person 被提供给提供者并且程序在运行时崩溃或抛出异常时,才会发现该错误。


根据亚历山大的回应,这似乎是最合理的:

https://repl.it/repls/GrowlingInconsequentialFanworms

最佳答案

我不明白这是怎么可能的,因为自动加载器在第一次使用时将它们加载到定义的命名空间中。一旦进入命名空间,任何东西都可以通过访问该命名空间来使用它。

PHP 命名空间没有任何方式限制其他命名空间可以访问它们,因此您的答案可能是否定的。

您可以做的是将您的私有(private)类放在一个命名空间中,告诉开发人员它们是私有(private)的:

use yourpackage\private\SomeClass;

它不会阻止他们,但可以明确他们不应该这样做。

关于php - 如何使用 PHP Composer 定义私有(private)类路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48068863/

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