日別アーカイブ: 2011年2月23日

PHP 関数がどこから呼ばれたか調べたり & PHP定数

 PHPで共有ファンクションを使っているけど、それがどこから呼ばれているか知らなきゃならないことがある。
 こういうときに利用できる関数がdebug_backtrace()というファンクション。
 PHPでFatalエラーが出たときとかに呼び出し関係を表示したり出来るのはこの仕組みが働いている。
var_dump(debug_backtrace());
とか埋め込んでおくと、その関数が呼ばれたときに、呼び出し関係と各要素のダンプがみられる。

あまりスマートではないけど、ある関数で、特定のコードから呼び出されたら処理を変更したいって言うことがあるが
$backtrace = debug_backtrace();
if($backtrace[2][‘args’][0][‘logic_file’]==’parts/stockman.php’)
の様にして、バックトレースの要素を使って分岐すると言うことも出来る。

PHPの便利な定数。
PHPには便利な変数($_SERVER等)があってよく使われているけど、定数もいくらかそろっていて、これがデバッグ向けの物がほとんどなので、debugネタのついでにメモ。
__LINE__ 行番号。 「__LINE__.’で問題が発生しました’」みたいに例外を投げてみたり。
__FILE__ ファイルのフルパスとファイル名。 変数からも取得できるけどこっちの方が書きやすい。
__DIR__ ファイルの存在するディレクトリ。 dirname(__FILE__)と同義。
__FUNCTION__ 現在の関数名。
__CLASS__ 現在のクラス名。 継承した時に、継承元で定義してある__CLASS__を使ったメソッドを、継承先で呼び出しても継承元のクラス名が戻ってくる点に注意(継承先でも同じメソッドを定義して__CLASS__を呼んでやれば、継承先のクラス名がとれる) これに対して、get_class($this)を呼ぶと、継承先で呼び出せば継承先のクラス名が戻ってくる(まぁ、インスタンスの名前だから当たり前だが)
__METHOD__ 現在の(クラス)メソッド名。
__NAMESPACE__ 現在の名前空間。 名前空間が実装されたのが最近なんで使ったことがない。

(3187)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP], PHP | コメントをどうぞ

ディスプレイの違い

 開発って言うかデザイン?
 Webサイトを作る時って、デザイナーが作るわけだけど、彼らの使うディスプレイって、色の良く出るVAやIPSの良質なディスプレイな事が多いし、ビデオカードもQuadroとかFireProとかが載ってたりする。
 他方、ライトユーザはオンボードビデオに安いTNディスプレイを使っていたりして、発色がめちゃくちゃなことがある。
 作業場のPCで淡いカラーリングを施したページを家電量販店の安いPCで表示したら真っ白って事があったり。
 昔は、デザイナーの作業の最終地点が印刷物で、AdobeカラーマッチングしたCMYKで作って、色分解して印刷所に出せば、印刷機とマッチングできているから綺麗に出てきていたわけだけど、今の最終地点はWebが多く、ここのクライアント環境は色々な物があるので、ある程度色をきつめに作っておかないとダメだったり、色がおかしく(良くある青白いもの意外に、赤傾向や緑傾向な環境もあったり)なったりすることもあるのだが、まぁ、この辺は作る側じゃどうしようもないんで、せいぜい、淡い色をちょっと濃い目にして、発色の弱い環境でも消えないようにするくらいしかないな(デザイナーがいくらマッチングしても、結局、クライアントがマッチングできていないのだから)

(83)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ