3

システム内の他のクラスと友達になるために、いくつかのクラスが必要です。この機能の欠如により、公開してはならないいくつかのメソッドを公開しました。その結果、私のチームのメンバーはコードをひどく醜い方法で実装し、混乱を引き起こします。

PHP 5.3で友情を定義する方法はありますか?

(私はhttp://bugs.php.net/bug.php?id=34044を知っています。簡単な解決策がない場合は、そこで投票することをお勧めします)。

4

3 に答える 3

3

私は同じ機能を探していて、解決策を実装することができました。これを使用するには、クラス Friendship から派生させ、派生クラスのフレンドであるクラスを指定するだけです。ここで見つけることができます: http://rommelsantor.com/clog/2011/04/23/php-5-3-class-friendship-support

于 2011-04-24T01:10:52.987 に答える
0

要するに、いいえ。一般的に受け入れられているアプローチは、ライブラリに対して開発する方法についてチームを教育するか、再設計することです。最初の解決策は、phpdoc でドキュメントを作成し、docbloc コメントで @visibility を使用して可視性を設定し、もちろん実際にクラスをドキュメント化することで、非常に簡単に実行できます。2 つ目は、もう少し詳細がわからないとコメントできません。

/**
 * 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();
  }
}
于 2010-05-30T14:39:19.633 に答える
-1

「友達になる」とはどういう意味かわかりません。抽象クラスを使用できます。このクラスでは、新しいクラスでそのクラスを「実装」できます。または、クラスに他のクラスを拡張させ、メソッドや変数などをパブリックまたはプライベートではなく「保護」することができます。

チームが「悪くて醜い方法で」コードを実装する場合、より大きな問題が発生する可能性があります。

于 2010-05-30T14:13:11.930 に答える