カテゴリー : PHP他

PHP 開発に重要となる暗黙の了解

PHPに関わらず、プログラミングにおけるソース入力には暗黙の了解がある。それらは先人達が築き上げたコモンセンスに近いもので、守るかどうかは個人に委ねられている。

まぁ、ソースの書き方は人それぞれで、プログラミング言語にもよって異なる。なのでこの話が話題になると、多分、どの言語が優れているのか、のような宗教戦争に似た葛藤が起こる事必至ではないだろうか?

で、この記事の目的は、実は単に slideshare を埋め込んでみるテストで、内容が yando さんの「新標準PSRに学ぶきれいなPHP」だったので、御託を述べただけでした。失礼いたしました。

Windows 7 + NetBeans IDE 7.1.1 + XDebug 設定メモ

XDebug のダウンロードと php.ini の設定

PHPのXDebugエクステンションをダウンロードしてPHPのエクステンションディレクトリ(ext)へコピーする。

今回インストールしたPHPは 5.3.10 VC9 x86 Thread Safe、XDebugは 2.2.0rc1 PHP 5.3 VC9 TS (32bit)。

php.iniの最後に以下を追加。Windows 7にPHPをインストールする際、C:\Program Filesにインストールするとファイルの書き換えが面倒になるので、別のディレクトリにインストールした方が良いかも。

[xdebug]
zend_extension="C:\Program Files\PHP\ext\php_xdebug-2.2.0RC1-5.3-vc9.dll"
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_log="D:\http\logs\xdebug.log

参考:PHP5.3におけるxdebugの正しい設定について

NetBeans PHPデバッガコンソール出力

短いプログラムでechoやprintコマンドで出力テストを試してみたが、ブラウザにもコンソールウィンドウにも表示ができなかった。

「ツール/PHP/デバッグ」で「デバッガコンソールを表示」をチェックする。php.iniの「output_buffering=off」を設定、とコメントがあるので4096をoffに書き直す。

apacheをリスタートしデバッグを実行してみると、デバッガコンソールに表示された日本語が文字化け。netbeans_default_optionsに「-J-Dfile.encoding=UTF-8」を追加したところ文字化け解消。

参考:HTML/CSS/PHP等のコーディングに、無料のNetBeansが快適過ぎる件

デバッグの実行が最後まで来たらブラウザにも結果が表示されるようになった。

今後の開発が快適になると良いなぁ。

PHP 今さらですが前月、翌月の日付取得

日付を取り扱う処理で前日や翌日、前月や翌月などを取得しようとすると、閏年の事も考えながら if 文などを使わなければならず、意外と面倒だ。

だったのだが、mktime() を使えば簡単に取得できる事が分かった(今さらで済みません orz)。

例えば今日の前日や翌日、あるいは前月や翌日は次の通り。

$yesterday = date('Y-m-d', mktime(0, 0, 0, date('n'), date('j') - 1, date('Y'));
$tomorrow = date('Y-m-d', mktime(0, 0, 0, date('n'), date('j') + 1, date('Y'));
$pastmonth = date('Y-m-d', mktime(0, 0, 0, date('n') - 1, date('j'), date('Y'));
$nextmonth = date('Y-m-d', mktime(0, 0, 0, date('n') + 1, date('j'), date('Y'));

なお、mktime() の引数に負の値が使えるのは、Windows で PHP5.1 以降なので使う場合はご注意を。

PHP5 クラス継承とメソッドのオーバーライド

PHP を習い始めてみると、Web アプリケーションを作る事に主題があるため、データベースの使い方、セッションやクッキーなどを利用した認証管理、メールの扱い方、開発に必要なフレームワーク、何よりも Web を取り巻く環境についての学習で手一杯だ。そのため、言語それ自体が持つオブジェクト指向プログラミングの機能について、かなり疎かにしていた事に気が付いた。

今後はもう少し突っ込んで勉強しようかと反省をしている。

さて今回、クラス継承した子クラスでメソッドをオーバーライドしたとき、親クラスでそのメソッドを呼び出していた場合、親クラスのメソッドが有効なのか、子クラスのメソッドが有効なのか悩んだのでテストして見ることにした。プログラムは以下の通り。

<php
class papa {
    public function __construct() {
        $this->hello();
    }

    protected function hello() {
        echo 'フムフム';
    }
}

class son extends papa {
    protected function hello() {
        echo 'キタ━━━━(゚∀゚)━━━━ !!!!!';
    }
}

$ore = new son();	    

さて、結果はいかに?何と、

キタ━━━━(゚∀゚)━━━━ !!!!!

でした。それでは、「protected」を「private」にするとどうなるか?

フムフム

でした。「public、protected、private」は、スコープに影響するので正しく使わないといけないですね。

次に、子クラスにもコンストラクタを用意するとどうなるでしょうか?子クラスを次のように書き換える。

class son extends papa {
    public function __construct() {
        $this->thanks();
    }

    protected function hello() {
    	echo 'キタ━━━━(゚∀゚)━━━━ !!!!!';
    }

    protected function thanks() {
        echo 'ドモドモ';
    }
}

結果は、

ドモドモ

でした。親クラスのコンストラクタは呼び出されないので、初期化で必要なら必ず呼び出すように。

class son extends papa {
    public function __construct() {
        parent::__construct();
        $this->thanks();
    }

以上、オレ備忘録でした。
PHP Ver.5.2.14

遅ればせながらQRコードをGoogle Chart API を使って表示してみた

QRコードを表示するためのプログラムを調べていた5年ほど前と比較すると、今はツールが豊富に供給され、手軽に表示できるようになったなぁ、と感心する。中でも Google Chart API を使ったこの方法が、一番お手軽ではないだろうか。

試しに、携帯のメーラーが起動できるか docomo用のコード

  MATMSG:TO:mt-systems@mt-systems.jp;SUB:docomo;;

を、Google Chart API で以下にQRコード表示してみる。



首尾良く表示、携帯のメーラーは起動しましたか?実は docomo の携帯持ってないので、自分は確認できてません(T_T)。

上の表示の指定は次の通り。

<a href="mailto:mt-systems@mt-systems.jp">
	<img src="http://chart.apis.google.com/chart?cht=qr&amp;chl=MATMSG%3ATO%3Amt-systems%40mt-systems.jp%3BSUB%3Adocomo%3B%3B&amp;chs=180x180" width="180" height="180" />
</a>

Google Chart API のアクセスは「img」タグを利用する。データはURLエンコードして渡す。漢字文字を利用したい場合は、docomo では Shift-JIS を利用するよう指示している。一方、Google Chart API はデフォルトで UTF-8 となっている。そこで、漢字を利用するなら API へのパラメータに「choe=Shift_JIS」を渡せばいいだろう。

docomo用の携帯メーラーに本文もQRコードで読み取りたい場合、上のコードの末尾にある2つの「;;」の間に、「BODY:(メッセージ);」を挿入すればよい。

以上、資料は以下の通りです。

KDDI au の場合

<a href="mailto:mt-systems@mt-systems.jp">
	<img src="http://chart.apis.google.com/chart?cht=qr&amp;chl=MAILTO%3Amt-systems%40mt-systems.jp%0D%0ASUBJECT%3Aau%0D%0A&amp;chs=180x180" width="180" height="180" />
</a>



うーん??? 「SUBJECT:au」 の後ろの改行コードがないようだが、これを読み込むとどうなるのだろうか?

au の資料は