2013-01-14 45 views
0

如何使它向後兼容PHP5.2?它適用於5.3及更高self ::在PHP5.2

錯誤

Fatal error: Cannot call method self::utf8_dec() or method does not exist 

代碼

private function utf8_decode($arr){ 
    array_walk_recursive($arr, 'self::utf8_dec'); // <----- error 

    return $arr; 
} 

private function utf8_dec(&$value, $key){ 
    $value = utf8_decode($value); 
} 
+0

PHP 5.2被認爲是EOL,不應該再使用。試着說服你的客戶升級到至少5.3或5.4 –

回答

0

而不是self,您可以直接使用類的名稱。它不夠靈活,但它應該工作。

static private function utf8_decode($arr){ 
    array_walk_recursive($arr, 'YourClass::utf8_dec'); 

    return $arr; 
} 

static private function utf8_dec(&$value, $key){ 
    $value = utf8_decode($value); 
} 

此外,您還需要在方法前加static關鍵字。

1

試試這個:

array_walk_recursive($arr, array(__CLASS__, 'utf8_dec')); 

而且我也可以這樣做:

private static function utf8_dec(&$value, $key) { // now is static! 
    $value = utf8_decode($value); 
} 

我還建議看看如何在PHP中定義回調:http://php.net/manual/en/language.types.callable.php

0

它似乎不是類型(靜態)的問題,而不是它被稱爲超出範圍。如果你不使用嚴格模式,它應該沒有你說功能是靜態的。

<?php 
class test { 
    public function __construct($arr) { 
     print_r(self::utf8_decode($arr)); 
     print_r($this->utf8_decode($arr)); 

     print_r(self::utf8_decode_v2($arr)); 
     print_r($this->utf8_decode_v2($arr)); 
    } 
    private static function utf8_decode($arr){ 
     array_walk_recursive($arr, 'self::utf8_dec'); 
     return $arr; 
    } 
    private function utf8_decode_v2($arr){ 
     array_walk_recursive($arr, array($this, 'utf8_dec')); 
     return $arr; 
    } 


    private function utf8_dec(&$value, $key){ 
     $value = utf8_decode($value); 
    } 
} 
$a = new test(array('apple','pinaple','nut')); 
?>