如何使用类外部的数组在__construct中定义静态变量?

时间:2012-04-10 01:22:15

标签: php class static

我的大脑已经失去了力量,而且我的搜索能力(我没有找到100%回答我正在寻找的东西)。话虽这么说,我有一个类,里面是一个空的静态变量$ title,我需要在__construct中定义,但它似乎无法通过全局获取它。我们只是展示一些代码吗?

$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 个答案:

答案 0 :(得分: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();

我也会将值作为参数传递,但这不会改变它的工作方式。

答案 1 :(得分: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)

答案 2 :(得分:0)

您应该首先初始化它 静态$ title = ...
当你新建一个实例时,会调用方法--construct。

答案 3 :(得分: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