PHP 朋友/包可见性
Posted
技术标签:
【中文标题】PHP 朋友/包可见性【英文标题】:PHP friend/package visibility 【发布时间】:2011-11-09 16:23:36 【问题描述】:有什么方法可以限制 php 中的可见性,就像 Java 中的“包”可见性或至少 C++ 中的“朋友”可见性一样?维护大型 OOP 项目并且不让任何人使用代码的任何部分的最佳做法是什么?
我尽可能多地使用私有和受保护的可见性,但有时这还不够。我知道这个请求:https://bugs.php.net/bug.php?id=55331。在 PHP 上实现这样的事情有什么进展吗?是否有任何解决方法可以保护您的代码(方法、类变量)不被从任何地方访问?
【问题讨论】:
不完全像 Java 中的包,但 namespaces 将用于代码封装。 请输入一个简短的例子好吗? 只是一个想法,如果你真的需要,你可以使用debug_backtrace
[php.net/manual/en/function.debug-backtrace.php] 来查看是什么代码调用了你的代码。本质上是编写自己的运行时访问控制。可能比它的价值更多的工作,debug_backtrace
的性能受到影响。
【参考方案1】:
直到今天,还没有语言结构可以限制可见性。但是你可以用 phpDocumentor 的 @internal
来注释你的类:
@internal
标签可以作为@api
标签的对应物,表明相关的结构元素纯粹用于该软件的内部工作。
API 用户可以遵循该建议。
【讨论】:
【参考方案2】:如here所述:
没有。声明命名空间后可以设置变量,但是变量 将始终存在于全局范围内。他们永远不会被束缚 命名空间。您可以从没有任何名称中推断出 分辨率说明 http://www.php.net/manual/en/language.namespaces.faq.php
【讨论】:
感谢您的回答。但是,我仍然想知道一些最佳做法或解决方法,以实现对您的代码的一些保护。 我不明白这如何回答 OP 的问题。命名空间与访问可见性无关。 @Markus 我同意我的这个旧答案没有明确解决它,但它说(与变量相反)任何命名空间中的所有内容都是全局的,因此你无法使用“private”或“protected”等访问修饰符隐藏成员。以上是关于PHP 朋友/包可见性的主要内容,如果未能解决你的问题,请参考以下文章