首页 > 解决方案 > PHP中的类静态函数变量引用

问题描述

PHP 7。

我试图在不同的情况下使用相同的类方法。第一次,当用户在数据库中创建一个新条目时,我用空值绘制了管理页面。它已创建如下。

$classname::drawAdmin(FALSE);

$classname 是一个变量,因为我事先不知道网页上将使用哪些类(Ikr?),并且必须从数据库中获取它。

在方法内部,它检查它是在创建一个新对象,还是重用一个现有对象。

static function drawAdmin( $mod = FALSE ) {
        print 'Technology<input type="text" name="technology" value="'.($mod?$this->technology:"").'" /><br />';
etc...
}

它在创建新条目时运行良好,检查它是否正在尝试修改,如果没有,则创建一个没有值的输入,否则它将对象数据写入值。

但是,当我创建一个新对象并尝试修改它的数据时它不起作用。

$class = new $row['class_name']($_GET['id']);
$class->drawAdmin(TRUE);

(类的构造函数清理 $_GET 数组。)

在这种情况下,我收到一条错误消息:

Fatal error: Using $this when not in object context in [censored]/class.phone.php on line 932

即使对象已正确创建并且存在(使用 var_dump 检查)。

哈哈,开个玩笑,它是一个静态方法,所以我不能使用$this!但是,当我将打印更改为:

static function drawAdmin( $mod = FALSE ) {
        print 'Technology<input type="text" name="technology" value="'.($mod?self::technology:"").'" /><br />';
etc...
}

我仍然收到错误消息:

Fatal error: Undefined class constant 'technology' in [censored]/class.phone.php on line 932

如果我将(受保护的)变量添加到静态变量,我不能再将它们与 $this-> 一起使用。

有什么方法可以让我在对象上下文和没有对象上下文的情况下使用相同的类变量?

标签: phpclass

解决方案


我认为您可以保持方法静态,但如果您正在编辑现有对象,则必须将同一类的实际实例作为可选的第二个参数传递给该方法,以便在 $mod 为真时使用,并且然后使用该实例中的“技术”值。

例如:

static fuction drawAdmin($mod=FALSE, $class=NULL) { 
        print 'Technology<input type="text" name="technology" value="'.($mod?$class->getTechnology():"").'" /><br />';
}

然后在它是修改的情况下,这样称呼它:

$class->drawAdmin(TRUE, $class);

推荐阅读