PHP で var_dumpのフォーマット

var_dumpデバッグしすぎ問題

複数のvar_dumpを出力させてどこに書き込んだか分からなくなった、なんてことないだろうか? (俺だけ?)

で、var_dump でデバッグしたいとき、こんな感じのフォーマットで設定しておく。

/**
 * 下記のフォーマットで書くと出力はこうなる
 * ExecFile: 呼び出したファイル名(行数)
 * Function: 呼び出した関数名
 * 値
 */
var_dump('ExecFile: '.basename(__FILE__).'('.__LINE__.')', 'FUNCTION: '.__FUNCTION__, variable, variable,...);
// var_dump は引数をカンマ区切りで無制限に渡せる。

Sublime Text 3 での Snippet設定

Sublime Text 3 のSnippetは下記設定例。
“var” を入力すると上記のスニペットが展開できるようになる。

ファイル名: var_dump.sublime-snippet

<snippet>
    <content><![CDATA[var_dump('ExecFile: '.basename(__FILE__).'('.__LINE__.')', 'FUNCTION: '.__FUNCTION__, ${1:variable});]]></content>
    <tabTrigger>var</tabTrigger>
    <scope>source.php</scope>
    <description>var_dump Debug</description>
</snippet>

PhalconでPHPビルトインサーバー時にドハマり

Phalcon を使ってみた

Phalconは「A full-stack PHP framework delivered as a C-extension」というフレームワークです。
ベンチマークで超絶速度(PHPフレームワークにおいて)をたたき出すポテンシャルを持っています。
Phalcon 公式はこちら

Phalcon、PHPビルトインサーバーでも動作するってよ

Phalconの公式ドキュメントはかなり詳細なことまで書かれています。
もちろん、サーバー設定方法まで丁寧に記載されています。

で、PHP5.4から搭載されたPHPビルトインサーバーの設定も書かれていました。
PHP ビルトインサーバーの利用

この設定は .htrouter.php というファイル(.htaccess的なもの)で、これを行わないとPhalconのデフォルトと同一の設定になりません。

<?php
if (!file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) {
    $_GET['_url'] = $_SERVER['REQUEST_URI'];
}
return false;

このファイルを使用してサーバーを起動

php -S localhost:8000 -t /public .htrouter.php

これで.htrouter.phpを使用してサーバーへアクセするようになります。

ところがどっこい

さて、これを使用していたもののタイトル通りにここではまってしまいました。
例えばGETにクエリ(パラメーター、Query String…等呼ばれ方はいろいろ)を付与し “/foo/bar?baz=qux” というURLへアクセスすると、ルーティングが上手く動作しなくなります。

変数などをダンプしてみると、
“bar?baz=qux” という文字列がルーティングの判定時に使われています。
本来この時点で取得しなければいけないのは “bar” という文字列だけです。

Phalconのルーティングは、ControllerクラスのActionと呼ばれる関数を使用して動的に呼び出しています。
上記の場合、bar?baz=quxAction()みたいな呼ばれ方をしてしまうということです。
本当はbarAction()を呼ばなければならない。

ならば正せばいい

実際のところ、このことが全く分からず(むしろ勝手にクエリストリングが分割されると思い込んでいたのも問題だった)、1日ハマって見つけたサイトがこちら。
Route not matches URI with querystring · Issue #379 · phalcon/cphalcon
ハイ、公式のgithubのissuesでした。

このissueを読んで上記のルーティングの仕組みをやっと理解。
出来上がった .htrouter.php はこちら

<?php
if (!file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) {
    if (!empty($_SERVER['REQUEST_URI'])) {
       $uriParts = explode('?', $_SERVER['REQUEST_URI']);
       $uri = $uriParts[0];
    } else {
       $uri = '/';
    }
    $_GET['_url'] = $uri;
}

return false;

このポイントの記事が全く見つからず、きっとPHP ビルトインサーバーをみんなが使ってないだけ俺の知識が浅いんじゃないうんきっとそうに違いない。と自己弁護しつつPhalconライフをお楽しみたいと思います。

追伸: 実はvar_dumpで$_GETとかを見ていればヒントがあった。困ったときはvar_dump。

読書しよう、読書

世間では読書なんていらないなんてこともたまに言われますが

そうは思わない。
本というのは知識はさることながら、時間まで凝縮されてる。
自分でやったら1年かかることでも本を読んだら数時間で知識を手に入れられる可能性がある。
なのに読書しないなんてもったいないよ。

いつ読めばいいの?

読む時間なんてそこら中に転がってる。
朝活、通勤、ランチ、帰宅時……。
昔の上司は常に文庫をポケットに忍ばせておいて、ちょっとした休憩に読んでいた。
技術書は大きいものが多いので難しいけど、最近は電子書籍をスマホで読む、という選択肢もとれる。
ちょっとした待ち時間にどんな本でも読めるのはスマホの利点だ。

読んでも覚えられない……

もし、そんな理由で読書を辞めている人がいるなら、そんなことは気にしないでいいんだ。
誰だって一回読んだくらいじゃ本の内容なんて完璧に (いや、ほとんど) 覚えてられない。
印象に残るのなんてほんの数行、ひと言……そんなもんだ。

もちろん世界には本当に一回読んだだけで覚える人もいるかもしれないが、他人は他人。
書評とかをまとめている人たちは、メモを取って紹介したい場所を外部に記憶しているだけ。覚えていられないんだからメモっておけばいい、というわけだ。

ただし何度も読む

同じ本を繰り返し読むのは正直しんどい。流し読みでもしんどい。
だから同じ分野の本、同じ人が書いている本を数冊読む。
同じ人が書いた同じテーマの内容でも、たとえ話や別確度からの内容が書かれていることがよくある。
そうやって同じようなテーマの本を3~5冊読めばおぼろげながら (もしくはかなりはっきりと) いろいろ掴めてくるはずだ。

技術書読むの?

まずは興味のある分野の本を手に取ろう。
自分がやりたい開発の本じゃなくても構わない。
私の場合、結構デザインの本とか仕事術、自己啓発と幅広く読んでいる。
自分が興味があるなら何でも片っ端から読んでいけばいい。

気楽に読もう

どんな本でも気楽にいこう。
つまらなかった次にいっちゃえばいい。

本の読み方にコレってことはない。
とにかく、流し読みでも何でもいいから気楽にいこう。

Sublime text はプロジェクトを使う。

Twitter読んでると、プラグインがうまく動かないといった話がよくある。
そもそも Sublime Text はプロジェクトを設定することを前提として作られている。
もちろんプロジェクトがなくても動くけど、設定ファイルはプロジェクトフォルダ内から探す。みたいなプログラムがプラグインではよくされている。

ちょっとした開発でもプロジェクトをまず作りましょう。