我的大脑已经失去了力量,而且我的搜索能力(我没有找到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();
获取文章的标题。但正如我之前提到的,我没有这样的运气。感谢所有帮助。
答案 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