― Web Technology and Life ―

知ってよかったPHPの便利関数

2014-09-11
私はPerlからプログラム入っているんですが、最近PHPやっていて、そこそこ各殴りコードはたくさん書いてきたんで、そろそろちゃんとした書き方みたいなのを身に着けていきたいなーって思っていくつか学んだのでメモ

呼び出し元の関数とかファイルを調べる

参考:debug_backtrace

Perlでいうcaller的な感じで使えますね。

オブジェクトをわかりやすくファイルにダンプする

参考:print_r

PHPのオブジェクトダンパーってvar_dumpがよく引き合いに出されますが、var_dumpだと余計な情報がたくさん出てきて大変見づらいんですよね。そいうわけで、print_rを使います。

$var = arrray( foo => "bar", hoge => 'moge' );

print_r($var);

そんで、こうしちゃうとエラーログとかファイルに書き込むときにどうするのよって感じなんですが、このprint_rに第二引数をtrueにすると、結果を文字列で返してくれるんですね。たとえば、

$dump_str = print_r($var,true);

error_log($dump_str,0);

見たいにやれば設定されているエラーログに書き込まれるので、モデルとコントローラーべったりのWebアプリで、ポストとかリダイレクトしちゃうUIのその直前のデータをデバックするときに役立ちます。

xdebug使えばそんなん必要ないみたいなんですが、一年前からxdebug使おうとしてまだ使えていないのでー苦笑

まぁ、本番とかxdebugいれるわけにはいかないからそういうときにも役立つかも。

「Warning: Invalid argument supplied for foreach() …」という配列が空でforeachしたときのエラー問題

なんかエラー出ること自体キモい気がするんですが、まぁオブジェクトなんでね、、、そういう挙動もいいですが、、、そうはいってももう少し融通聞かせてくれないかなって思っていたんですが、以下の記事で解決しました。

参考:PHPのforeach文でnullチェックなしでエラー回避

感謝です。キャストってこういうときに便利なんですねー。

多次元配列内のハッシュのキーの一つでソートしたい(あるいは任意の順番のランキングを作りたい)

mysqlだとsortを任意のID順とかでとれたりしますね。


SELECT * FROM member ORDER BY field(id,2,1,4,3);

しかし、カジュアルにこういうSQLをたたけないときとか、すでにとってある配列から、ランクを生成したいときは、【PHP】多次元連想配列のソートという記事にあるように、array_multisortが便利みたいです


#idでソートしたい
$hoge = array(
            array('id'=>'3','date'=>'2010.10','name'=>'イカ娘'),
            array('id'=>'1','date'=>'2010.10','name'=>'それでも町は廻ってる'),
            array('id'=>'2','date'=>'2010.11','name'=>'百花繚乱サムライガール')
);

//いったんソートするキーを配列で取り出して、
foreach($hoge as $key=>$value){
    $id[$key] = $value['id'];
}

array_multisort($id ,SORT_ASC,$hoge);

print_r()$hoge;

新しいphpは普通にモダンだけど世の中のPHPは5.3以前のレガシー

php5.4,5.5とかなり進化してほかのLLと全然変わらないし、しっかりビルドされていれば、フルスタックのPHPのほうに一日の長がある気がしています。

日付けとかPerlだと無限に悩むしかないですが、PHPだとdateとか普通に使えばいいし、そんなに気兼ねない。

でも、なんかですね、

Class->func(
    foo => 'hoge',
    bar => 'moge',
);

みたいな感じでですね、使うコードをもっと見たいし、書きたいんですよねー。

だいたい、なんか

Class->func($foo,$bar);

みたいな感じでですね、これ順番ややこしいし、オプション増えたらきりないですよねー問題から抜け出したいんですよねー。Perlだと、Smart::Argsとかいうすばらしいドキュメントふうコードをかけるモジュールがあってマジ気持ちよくなれるんですが・・・

まぁそのうち移植しろってことですかねー。まぁ当分無理だろうけど・・・

順次更新していきます

まぁここに書き溜めていきますよって感じですが、最近体調がすぐれなくて、YAPC::Asia2014もいけなかったから、今度PHP Conferenceには一応行こうかなーって思っている次第。

PHP update_at : 2015-01-30T15:43:26
hirobanex.netの更新情報の取得
 RSSリーダーで購読する   
blog comments powered by Disqus