public static function assign($name, $value)
{
$this->params[] = array($name => $value);
}
public static function draw()
{
return $this->params;
}
}
<?php
$test = Templater::assign('key', 'value')->draw();
print_r($test);
我需要函数“assign”是静态的,但$ params对于整个类来说很常见.. 但是这段代码不起作用。
Fatal error: Using $this when not in object context
有什么想法吗?
答案 0 :(得分:7)
听起来您希望$params
成为static
:
<?php
class Templater
{
static $params = array();
public static function assign($name, $value)
{
self::$params[] = array($name => $value);
}
public static function draw()
{
return self::$params;
}
}
<?php
Templater::assign('key', 'value');
$test = Templater::draw();
print_r($test);
答案 1 :(得分:2)
$this
关键字是指类实例。当您尝试在静态方法中调用它时,不使用类实例。因此,assign
方法无法与$params
进行交互,这不是静态的。使$params
为静态,或assign
动态(非静态)。
<?php
class Templater
{
static var $params = array();
public static function assign($name, $value)
{
$this->params[] = array($name => $value);
}
public static dunction draw()
{
return self::params;
}
}
或:
<?php
class Templater
{
var $params = array();
public function assign($name, $value)
{
$this->params[] = array($name => $value);
}
public dunction draw()
{
return $this->params;
}
}
两者都可以,但你必须选择一个更适合你的应用程序设计的那个。
答案 2 :(得分:1)
如果您的意思是$params
是静态字段,请使用:
class Templater {
private static $params = array();
public static function assign($name, $value) {
self::params[] = array($name => $value);
}
public static dunction draw() {
return self::params;
}
}
static
个函数没有$this
上下文。
顺便说一下,不要使用var
来声明实例变量。这是PHP4。用PHP5的方式做。
答案 3 :(得分:1)
Singleton在这里工作得很好
class Templater {
private static $instance = null;
private $params = array();
public function __construct(){
return $this;
}
public static function instance(){
if(is_null(self::$instance)) self::$instance = new self();
return self::$instance;
}
public function assign($name, $value){
$this->params[$name] = $value;
return $this;
}
public function draw(){
return $this->params;
}
}
用法:
$test = Templater::instance()
->assign('var1', 'value1')
->assign('var2', 'value2')
->draw();
print_r($test);