我需要一些课程来与我系统中的其他课程建立联系。缺乏这个功能让我宣传了一些不应公开的方法。这样做的后果是我的团队成员以一种糟糕而丑陋的方式实现代码,导致混乱。
有没有办法在php 5.3中定义友谊?
(我知道http://bugs.php.net/bug.php?id=34044如果没有简单的解决方案,你可能想在那里投票。)
答案 0 :(得分:3)
我正在寻求相同的功能,并能够实施解决方案。要使用它,只需从友谊类派生,并指定作为派生类的朋友的类。您可以在此处找到它:http://rommelsantor.com/clog/2011/04/23/php-5-3-class-friendship-support
答案 1 :(得分:0)
简而言之,没有。普遍接受的方法是教育您的团队如何针对您的图书馆进行开发或重新设计。第一个解决方案可以通过使用phpdoc构建文档并使用@visibility在docbloc注释中设置可见性来轻松完成,当然实际上是记录了类。如果不了解更多细节,我就无法发表评论。
/**
* Some helper class for LibraryInterface
*
* ATTENTION!
* This class should not be used outside this package.
*
* @visibility package
* @package mypackage
*/
class Helper
{
public function doStuff()
{
/* does stuff */
}
}
/**
* Class for accessing some part of the library.
*
* @visibility public
* @package mypackage
*/
class LibraryInterface
{
public function doStuff()
{
$this->helper->doStuff();
}
}
答案 2 :(得分:-1)
我不确定你的“朋友”是什么意思。您可以使用抽象类,其中任何新类都可以“实现”该类。或者你可以让类扩展其他类,并使方法,变量等“受到保护”而不是公共或私有。
如果您的团队“以一种糟糕而丑陋的方式”实施任何代码,那么您可能会遇到更大的问题。