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->使用它们。
有什么办法可以在对象和对象上下文之间使用相同的类变量吗?
答案 0 :(得分:1)
我认为您可以使该方法保持静态,但如果要编辑现有对象,则必须将同一类的实际实例作为可选的第二个参数传递给该方法,以便在$ mod为true,然后使用该实例中的“技术”值。
例如:
static fuction drawAdmin($mod=FALSE, $class=NULL) {
print 'Technology<input type="text" name="technology" value="'.($mod?$class->getTechnology():"").'" /><br />';
}
,然后将其修改为:
$class->drawAdmin(TRUE, $class);