如何使这个向后兼容PHP5.2?它适用于5.3及更高版本
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 :(得分: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
答案 1 :(得分: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
关键字为方法添加前缀。
答案 2 :(得分: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'));
?>