2015-07-28 49 views
0

爲什麼在嵌套函數中不能訪問類屬性?那麼我如何使用它?如何在嵌套函數中使用類屬性

class MyClass 
{ 
    public $var = "I'm a class property!"; 

    public function Test() 
    { 
     function SubTest() 
     { 
      // I need to $this->var; here 
     } 
    } 

} 

我想echo$varSubTest()。可能嗎 ?

+0

有沒有這樣的事情作爲一個「嵌套」功能....你有什麼是一個方法內的函數定義.....它意味着函數'SubTest()'不會是除非調用Test()'方法;但是一旦它被定義了,它將成爲__global__中的一個普通函數(或者如果你使用命名空間的話可能命名空間)作用域.....它不以任何方式成爲MyClass的一部分,所以不會繼承對象屬性 –

+0

@MarkBaker啊,明白了。謝謝 – Shafizadeh

回答

1

如何使用閉包?從PHP 5.4開始,在閉包內部可以看到$this

除此之外,你不應該在這樣的方法內定義一個函數。 PHP函數是全局的,意味着它們的行爲方式與在外部聲明的方式完全相同。

class MyClass 
{ 
    public $var = "I'm a class property!"; 

    public function Test($str) 
    { 

     $callback = function() use ($str) 
     { 
      print_r($this->var . " " . $str); 

     }; 

     return call_user_func($callback); 
    } 

} 

$a = new MyClass(); 
$a->Test("My name is not Foo."); 
1

這樣做怎麼樣?

<?php 
class MyClass{ 

    public $var = "I'm a class property!"; 

    public function Test(){ 
     function SubTest(&$father){ 
      $father->var = 'something else'; 
      echo 'here ! '.$father->var.'<br />'; 
     } 
     echo $this->var.'<br />'; 
     SubTest($this); 
     echo $this->var.'<br />'; 
    } 
} 

$test = new MyClass(); 
echo $test->var.'<br />'; 
$test->Test(); 

?> 

給出了這樣的結果:

I'm a class property! 
I'm a class property! 
here ! something else 
something else 
+0

我想要這行的輸出:echo'$ obj-> var;'是'別的東西'。 – Shafizadeh

+0

@Sajad我已經給我的答案添加了一個示例,但我不確定要了解您要求的內容... :-) – Vico

+0

謝謝,只是您可以在答案中添加一點並解釋此字符' &'? – Shafizadeh