PHP对象可见性和继承

时间:2014-10-02 05:59:40

标签: php oop

我正在阅读有关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

2 个答案:

答案 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();