2

このチュートリアルに従って、php と html を使用して Web ページを作成しています。ページのタイトル、コンテンツなどのさまざまな変数を設定できるテンプレートをセットアップしようとしていましたが、適切に設定するのに問題がありました。

私のインデックスページでは、次のようにphpを開始しています:

<!DOCTYPE html>
<?php 
include('includes/meta.php');
$md = new metadata();
$md->setTitle("HELLOOOO");
?> 
...<!-- rest of html -->

次に、meta.php の Metadata クラス (HTML を含む) で:

<?php

class metadata
{
    private $title = "default";
    public function setTitle($title) { $this->title = $title; }
    public function getTitle() { return $this->title; }


}
 ?>
<head>
    <meta charset="utf-8">
    <title>
         <?php $md = new metadata();
             echo $md->getTitle();?>
    </title>

ただし、タイトルには常に「デフォルト」がエコーされます。

別のクラス/ファイルで変数を適切に設定するにはどうすればよいですか? そして、これを達成するための最良の規則は何ですか?

4

2 に答える 2

2

new metadata();実際には、最初に作成されたオブジェクトを参照する必要があるときに、新しいオブジェクトを作成しているため、シングルトンが必要です。

実装例を次に示します。

class metadata
{
    private $title = "default";
    private function __construct() {} // Private constructor

    private static $instance = null;
    public static function getInstance() {
       if( self::$instance == null) { 
           self::$instance = new metadata();
       }
       return self::$instance;
    }
    public function setTitle($title) { $this->title = $title; }
    public function getTitle() { return $this->title; }
}

ここで、次のことを行う必要があります。

$md = metadata::getInstance();

メタデータ クラスのオブジェクトを取得します。

見てみる

于 2012-06-17T15:36:34.960 に答える
1

クラスを宣言するファイルには出力する HTML も含まれているため、シングルトンでは十分ではありません。だから2つの解決策:

  • クラス定義と html 出力を 2 つの異なるファイルに分割します。変数の呼び出し方法に依存しないように、メタデータ クラスはシングルトンにする必要があります。
  • HTML 出力をクラスのメソッドにカプセル化し、必要なときにこのメソッドを呼び出します。メタデータ クラスはシングルトンである可能性がありますが、この場合は必須ではありません。
  • 于 2012-06-17T15:44:16.097 に答える