2014-01-30 63 views
0

例子:返回一個方法的引用?

Class Test { 
    private function __construct() {} 

    public static function init() { 
     $new_test = new Test(); 
     return $new_test->inner_test; 
    } 

    public function inner_test() { 
     print '!!!!'; 
    } 
} 

$test = Test::init(); 
$test(); 

返回「PHP致命錯誤:函數名必須是一個字符串」

有沒有辦法做到在PHP此Javascript類型的行爲?

+0

PHP無法返回像JS一樣的函數引用。也許嘗試閱讀http://php.net/manual/functions.anonymous.php – Phil

+0

@Phil,是的,它可以...你只是分配一個變量的指針。他很接近,但因爲他分配了一門課,所以他必須使用一個數組。 – Thomas

+0

@Thomas不,它不能 – Phil

回答

0

下面PHP 5.4

Class Test { 
    private function __construct() {} 

    public static function init() { 
     $new_test = new Test(); 
     return $new_test->inner_test(); 
    } 

    public function inner_test() { 
     print '!!!!'; 
    } 
} 

$test = array('Test','init'); 
call_user_func($test); 

菲爾:

function test(){ 
echo "Hello"; 
} 
$test = test; 
$test(); 

運行在沙盒。

+0

現在我們來看看它,它只適用於較新的PHP版本,這是我主要使用的版本。 – Thomas

+0

'$ test()'語法對我來說是一個新的語法。雖然 – Phil

+0

找不到有關文檔的參考文獻您的小示例給了我* PHP注意:使用未定義的常量測試 - 假定'test'*。這只是PHP字符串擴展。你用'$ test = ['Test','init']; $ test()'較冷 – Phil

0

感謝Phil的鏈接。這個作品:

Class Test { 
    private function __construct($myString) { 
     $this->myString = $myString; 
    } 

    public static function init($myString) { 
     $new_test = new Test($myString); 
     return function() use (&$new_test) {$new_test->inner_test();}; 
    } 

    public function inner_test() { 
     print $this->myString; 
    } 
} 

$test = Test::init('Lorem Ipsum Dolar'); 
$test(); 
+0

正如一個筆記,匿名函數不存在,直到PHP 5.3 – Thomas

+0

是。由於這種限制,我實際上不會使用它,但這正是我所期待的。 – Joren

+0

檢查我的答案,我編輯它,所以它可以適用於任何PHP的大部分。 – Thomas

相關問題