1

私の脳は力を使い果たしており、それを使って検索するスキルがあります(私が探しているものに対する100%の答えは見つかりませんでした)。そうは言っても、__construct内で定義する必要がある空の静的変数$titleであるクラスがありますが、グローバル経由で取得できないようです。コードをいくつか示しましょう。

$arg = array( my data is here );
class Article
{
    static $title;

    public function __construct()
    {
        global $arg;
        self::$title = $arg['title'];
    }

    public static function title()
    {
        return self::$title;
    }
}

私の最終目標は単純に行うことです

echo Article::title();

記事のタイトルを取得します。しかし、前に述べたように、私にはそのような運はありません。すべての助けに感謝します。

4

4 に答える 4

4

@Amberのコメントには同意しますが、実行しようとしていることは実行できますが、必ずしもオブジェクトをインスタンス化する必要がないため、そのためのコンストラクターを使用することはできません。

$arg = array( my data is here );
class Article
{
    static $title;

    static function set_static()
    {
        global $arg;
        self::$title = $arg['title'];
    }

    public static function title()
    {
        return self::$title;
    }
}
Article::set_static();

値も引数として渡しますが、それによって動作が変わることはありません。

于 2012-04-10T01:32:02.347 に答える
1

使用するSingleton

$arg = array("title"=>" my data is here ");
class Article
{
    static $title;
    static $instance = null ; 

    public function __construct()
    {
        self::$title = $GLOBALS['arg']['title'];
    }

    public static function getInstance()
    {
        if(self::$instance === null)
        {
            self::$instance =  new self();
        }

        return self::$instance;
    }
    public static function title()
    {
        self::getInstance();
        return self::$title;
    }
}


var_dump(Article::title()); //Returns string ' my data is here ' (length=17)
var_dump(Article::getInstance()->title()); // Returns string ' my data is here ' (length=17)
于 2012-04-10T01:29:22.943 に答える
0

そもそも初期化する必要があります。
Static $ title = ...
インスタンスを新規作成すると、メソッド--constructが呼び出されます。

于 2012-04-10T01:31:21.403 に答える
0

私は静的関数を使用し、非効率的な可変ロードの場合、次のようにプライベートまたは保護されたメンバーにアクセスします。

$arg = array('title' => 'My Title');
class Article
{
    static function title()
    {
        global $arg;
        return $arg['title'];
    }

    // or if the var load is inefficient ...
    protected static $title_md5;
    static function title_md5()
    {
        if (!isset(self::$title_md5))
            self::$title_md5 = md5(self::title());
        return self::$title_md5;
    }
}
echo(
    'title = ' . Article::title() . "\n" . 
    'title_md5 = ' . Article::title_md5() . "\n"
);

出力:

title = My Title
title_md5 = 5badc643b79fdda9775c45b46540afc0
于 2013-10-14T05:05:17.553 に答える