2016-07-21 6 views
1

私は最近、5.3サーバーで異常な問題に遭遇しました(古いですが、更新するまでには至りません)。 - どのような理由のために、それはPHPの古いバージョンでは失敗するでしょう、私がしようとしたとき、それは5.5にうまく働いた

"Using $this when not in object context"

mb_detect_encoding$this->encodings一部は致命的なエラーの原因となりましたか? array_mapコールバックが壊れますか?

public function getNextLine() 
    { 
    $csvRow = fgetcsv($this->fileHandler, 0, $this->separator, $this->enclosure); 
    if ($csvRow && is_array($csvRow)) 
    { 
     array_map(function($str) { 
     return iconv(mb_detect_encoding($str, $this->encodings, true), 'UTF-8', $str); 
     }, $csvRow); 
     return $csvRow; 
    } 
    return false; 
    } 

答えて

2

これは、PHPマニュアルに記載されている:

 
Version Description 
5.4.0 $this can be used in anonymous functions. 

Anonymous functions

For PHP 5.3 $this support for Closures was removed because no consensus could be reached how to implement it in a sane fashion.

可能な回避策は、別の変数に再割り当てこれによく、useを介してそれを渡す:

$_this = $this; 
function() use($_this) { ... } 
+1

だから、sta 5.4から今すぐ動作します。隠し機能のもう1つが見逃しやすく、デバッグして迷惑をかけることがあります。 PHPでスコープの問題に対処する必要はありません。 –

+0

PHP 5.3の場合、このClosureのサポートは削除されました。合理的な方法でそれを実装する方法には至っていないからです。はい、5.4から動作します。 – Pierre