2013-07-10 26 views
0

我想在我的方法函數中使用myVar。我已經嘗試添加global但仍然沒有。我知道這可能是基本的,但我似乎無法找到它。在方法的函數內部使用Class屬性

class myClass{ 

    public $myVar; 

    public function myFunction() { 

    function myInnerFunction() { 
     //how do I use this variable here 
     echo $this->myVar; 
    } 
    } 
} 

每當我嘗試使用$this我得到這個錯誤:「使用$這個時候不要在對象上下文」

編輯:在我的代碼錯誤

+0

使用私有或受保護的方法。你只是定義了一個全局函數。你甚至可以嘗試使用'create_function'(http://php.net/manual/en/function.create-function.php) – Populus

+0

'函數myInnerFunction'使該函數* global *(但僅在調用myFunction後) 。'myInnerFunction'是從'myFunction'之外調用的嗎? 'myInnerFunction'從哪裏被調用? –

回答

3

您應該使用$this->myVar

查看PHP Documentation - The Basics

<?php 
class SimpleClass 
{ 
    // property declaration 
    public $var = 'a default value'; 

    // method declaration 
    public function displayVar() { 
     echo $this->var; 
    } 
} 
?> 

The pseudo-variable $this is available when a method is called from within an object context. $this is a reference to the calling object (usually the object to which the method belongs

更新:

在新的代碼示例,myInnerFunctionnested function且直到myFunction方法被稱爲不可訪問。一旦調用myFunction方法,myInnerFunction就成爲global範圍的一部分。

也許這是你在找什麼:

class myClass{ 

    public $myVar; 

    public function myFunction() { 

    } 

    function myInnerFunction() { 
    //how do I use this variable here 
    echo $this->myVar; 
    } 

} 
+0

對不起。我已經嘗試過,但忘了把它放在上面的代碼片段中。我只是更新了代碼,以反映 – alexdmejias

0

把它作爲參數傳遞給內部函數。

+0

也許OP會找到一個有用的例子。 – Mike

1

myInnerFunction這樣的內部函數始終是全局的,即使它們是在類中的成員函數內部定義的。另一個類似的例子見this question

所以,PHP,以下是(幾乎)相當於:

class myClass{ 

    public $myVar; 

    public function myFunction() { 

    function myInnerFunction() { 
     //how do I use this variable here 
     echo $this->myVar; 
    } 
    } 
} 

而且

class myClass{ 

    public $myVar; 

    public function myFunction() { 

    } 
} 

function myInnerFunction() { 
    //how do I use this variable here 
    echo $this->myVar; 
} 

希望第二個例子說明了爲什麼$this甚至沒有範圍爲myInnerFunction。解決方案只是將變量作爲參數傳遞給函數。

0

您可以使用ReflectionProperty

$prop = new ReflectionProperty("SimpleClass", 'var'); 

完整的示例:

class myClass{ 

    public $myVar; 

    public function myFunction() { 

    function myInnerFunction() { 
     //how do I use this variable here 
     $prop = new ReflectionProperty("SimpleClass", 'myVar'); 
    } 
    } 
} 
0

上面的解決方案是不錯的,當你需要每個實例有一個自己的價值。如果你需要所有實例都具有相同的可以使用靜態:

class myClass 
{ 
    public static $myVar = "this is my var's value"; 

    public function myClass() { 
     echo self::$myVar; 
    } 
} 

new myClass(); 

see here

相關問題