1

我的大脑已经没电了,我的搜索技能也随之耗尽(我没有找到我正在寻找的 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

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

我使用一个静态函数,对于低效的变量加载,我让它访问一个私有或受保护的成员,如下所示:

$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 回答
0

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

于 2012-04-10T01:31:21.403 回答