私が達成しようとしていること (PHP 5.3) は、たとえば、ページの HTML 本文の私の表現へのアクセサーを持つことです。すべてを直接エコーする代わりに、そのシングルトンのエントリの配列に追加する必要があります。例:myBodyClass::add('<h1>Title</h1>');
add()
として宣言されていますpublic static function add($strEntry) {}
self::$entries[] = $strEntry;
( class VersionB )のような静的配列 $entries にそれらを追加するだけですか、それとものようなインスタンスを使用する必要がありますself::getInstance()->entries[] = $strEntry;
か? ( class VersionA ) (もちろん getInstance() は必要に応じて '...new self;' をインスタンス化します)
違いはまだよくわかりませんが、残念です。
私の質問の 2 番目の部分は、オブジェクトを印刷する方法です。PHP のマニュアルでは、__toString() を static にできない理由について少し説明がありませんが、パーサーがecho myBodyClass
定数との区別に問題があることは理解できます (それが理由ですか?)。
理想的には、体のすべての部分を追加するために必要なだけ呼び出し、スクリプトの最後でクラス内のメソッドを呼び出すadd()
ようなものを使用したいと考えています。echo myHeaderClass, myBodyClass, myFooterClass;
__toString()
私を正しい方向に向けてくれてありがとう。
コード例
class VersionA
{
private static $instance = null;
private $entries = array();
private final function __construct(){}
private final function __clone(){}
private static final function getInstance()
{
if (self::$instance === null) :
self::$instance = new self;
endif;
return self::$instance;
}
public static function add($sString)
{
self::getInstance()->entries[] = $sString;
}
public static function getHtml()
{
return implode("\r\n", self::getInstance()->entries);
}
}
class VersionB
{
private static $entries = array();
private final function __construct(){}
private final function __clone(){}
public static function add($sString)
{
self::$entries[] = $sString;
}
public static function getHtml()
{
return implode("\r\n", self::$entries);
}
}