2011-01-21 14 views
0

ランダム関数変数$ variables ['content']の始めに1,000文字の長さがあるとしましょう。変数が変更される関数と行番号を見つける

このランダム関数は非常に長く、多くの入れ子関数があります。

関数の最後では、$ variables ['content']の長さは20文字です。

この変数を変更したネストされた関数はどれぐらいですか?

+0

「関数内の行番号はどのようにしますか」 – miku

+1

あなたは何をしたいのか分かりません。その変数がどの行で変更されたのかを知りたい( 'null'から何かに)? – Donovan

+2

あなたは最後の文/質問で私を失った。 – BoltClock

答えて

0

私はこれが問題のコードトレースが役立つと思います。

私のケースでは、多くの機能で変更されていたこの変数がありましたが、私はどこを知りませんでした。

問題は、プログラムのある時点で変数(文字列)が約40,000文字であったことです。プログラムの終わりには20文字に切り詰められていました。

私はこの情報を見つけるために、Zendデバッガを使ってコードを実行しました。私が望んでいた情報(変数がどのような変数を変更したか)を見つけましたが、しばらく時間がかかりました。

Exampletracing documentationproject hometutorial article

はどうやらのXDebugは、変数が変更されているもの機能で、何行番号を教えてくれません。

0

返品の方法はわかりませんが、魔法の定数__LINE__を使用できます。現在のドキュメントの行が返されます。

$variables['line']という変数を作成し、適切な場合は値として__LINE__を割り当てることができます。

+0

私はそれを試してみましょう。あなたはまだ1行のコードに触れる必要がないので、私はまだデバッガを使うでしょう。 –

0

私がいた場合は、まず1000行の獣を分解することを検討します。おそらくそれが巨大であることは正当な理由はないでしょう。はい、それはあなたの現在のバグをモンキーパッチしようとするよりも時間がかかりますが、おそらくそれを分解しようとしているだけで何十個ものバグが見つかるでしょう。

講義を終えて、私はのようにメソッド呼び出しを検索/置換します:$variables['content'] = hello(\1, __LINE__);。セミコロンなどで文字列を割り当てている場合は、これが失敗するので、すべての変更を慎重に検査してください。 2つのパラメータ、すなわち$variables['content']に割り当てられている行番号と行番号をとるhello()関数を記述します。 hello()では、単に行番号を標準出力エラーや最も便利なものに出力してから、最初の引数をそのまま返します。

すべての修正を終えたら、これらの愚かなログ機能をすべて削除するか、「$variables['content']アクションを設定する」が重要であることが分かります。リファクタリングは小さなものから始めることができます。 :)

関連する問題