2014-10-02 98 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();