2009-07-23 11 views
5

私は今日、私たちのPHPコードのいくつかで非常に奇妙な動作に遭遇しました。私たちにはファイルを扱うクラスがあります。これは次のようなものです:未登録の予約語ですか?

これはかなり普通ですが、$ this-> upload()関数はNULL以外のものを返しませんでした。正しい機能が実行されていることを確認しました。それが返される前に戻り値が返されました。真の値か文字列だけを返してみました。すべてが正しかった。しかし$ this-> uploadはまだNULLに評価されます。また、ログには何もなく、ERROR_ALLがオンになっています。

exasperationでは、関数名をfoo_uploadに変更しました。突然すべてがうまくいった。 「アップロード」はPHP reserved wordsのリストにありません。誰でも "upload"という名前のクラス関数が失敗する理由を知りませんか?既存のメソッドを呼び出そうと(

if($a = $this->upload) { // => NULL 
    $this->update_db(); //never reached this line 
} 
var_dump($a); 

これに代えて(OPから):あなたがこれを持っていた場合、アップロードは(inexistingプロパティにアクセスしようとしている)だろう「呼び出し」ときはnullを取得する

+0

アップロード機能にエコーを入れましたか? –

+0

どこかで上書きされていますか? – Greg

+0

@Chacha:アップロード機能の中にエコーを入れました。それは期待値を与えた。 @Greg:AFileクラスには子がありません(まだ)ので、メソッドをオーバーライドしないでください。 – dnagirl

答えて

1

一つの方法):

if($a = $this->upload()) { // => true or false 
    $this->update_db(); //never reached this line 
} 
var_dump($a); 

あなたが()を忘れていないチェックしましたか?

それはこのない場合は、E_ALLに設定するerror_reportingでみてください、とのエラー表示:

ini_set('display_errors', true); 
error_reporting(E_ALL); 

を(あなたはそれはあなたが何を意味するのかだと確信し、「ERROR_ALLがオンになっている」、そうではないと述べた)

+0

申し訳ありませんが、私はerror_reporting(E_ALL)を意味しました。括弧が存在し、同じ名前のオブジェクト変数はありません。 $ varの中にある$ this-> upload()の結果をあなたが示唆するようにキャッチしようとしました。違いはありませんでした。 – dnagirl

+0

ok :-(本当に答えを知りたいのですが、 –

2

アップロードメソッドの最後のreturn文が、そのメソッドの唯一のreturn文であることを確認してください。

+0

ですが、それは非常に良い点です。 – dnagirl