我正在阅读有关PHP类的本教程。我真的完全理解它,任何人都可以帮助我吗? 我遇到了这个课程
<?php
class foo{
private $_var;
static function bar(){
return $this->_var;
}
function setVar($value = null){
$this->_var = $value;
}
}
?>
它说这堂课有问题。这是显而易见的吗?我不知道它有什么问题......它是var之前的下划线吗? 编辑:如果我运行此代码
$x = new foo();
$x->setVar(1);
echo $x->bar();
我收到此消息致命错误:在第6行的main.php中不在对象上下文中时使用$ this PHP致命错误:在第6行的main.php中不在对象上下文中时使用$ this
答案 0 :(得分:0)
基本上,当你使用静态上下文时,你必须使用self而不是$ this。因此,在这种情况下,您必须更改
return $this->_var;
与
return self::$_var;
<强>更新强>
要么这样做:
// traditional object context
class foo {
private $_var;
function bar(){
return $this->_var;
}
function setVar($value = null){
$this->_var = $value;
}
}
$x = new foo();
$x->setVar(1);
echo $x->bar();
或做
// static context
class foo {
static $_var;
static function bar(){
return self::$_var;
}
static function setVar($value = null){
self::$_var = $value;
}
}
foo::setVar(1);
echo foo::bar();
答案 1 :(得分:0)
静态函数由类名或self调用(在被调用的函数中属于同一个类),你不能在$ this上调用它
echo $x->bar(); // this is wrong
应该是
echo foo::bar();