2014-10-02 70 views
-1

我正在阅读本教程中关于PHP类。我还没有真正理解它,任何人都可以在这里帮助我? 我碰到这个班级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行PHP致命错误main.php对象上下文:使用$这个时候不是在对象上下文中第6行的main.php

+0

尝试使用先搜索:http://stackoverflow.com/questions/2350937/php-fatal-error-using-this-when-not-in-object-context – 2014-10-02 06:02:20

回答

0

基本上,当你使用静态上下文时,你必须使用self而不是$ this。所以,在这种情况下,你必须改变

return $this->_var; 

return self::$_var; 

UPDATE:

做这一点:

// 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(); 
+0

没错,那是一个错字。 – brian 2014-10-02 06:04:19

+0

我改变它后,我得到以下错误访问未声明的静态属性:foo :: $ _ var在第4行。 – elgranchuy 2014-10-02 06:08:15

+0

请参阅上面的编辑。 – brian 2014-10-02 06:18:18

0

静态函数是由类名或自调用(被调用函数在同一个类中),你不能把它在$此

echo $x->bar(); // this is wrong 

应该

echo foo::bar();