クラス内での自分の呼び方

2008/06/20 | PHPの基本

自分でプログラムを作るときは、基本的にはフレームワークでの構築になるので、classを記述して、objectを生成し、そこからメンバ関数にアクセスすることがほとんどだ。だからclassの中のメンバ関数から、他のメンバ関数を呼び出すときは以下のような記述になる。

$this->hoge()
$thisはいうまでもなくオブジェクトそのものを意味する。

ところが、稀にオブジェクトを生成せずに直接class内のメンバ関数にアクセスして使うような記述をすることもある。極力内容には心がけているのだが、簡単な関数を作成したりする場合に、同じ名前空間(クラス名)の中に類似関数(メンバ関数)をとりまとめておいたりするために、やはりclassを使用する。

このとき、同じclass内の別の関数へのアクセスの記述方法がわからなかった(というかべた書きしていた)。例えば、

class hoge
{
  fuga(){}
  piyo(){}
}

みたいなclassがあるとして、メンバ関数piyoをhoge::piyo()みたいに呼び出して使用するわけだが、piyo関数でfuga関数を呼びたいときにどうすればよいのか、それがわからなかった。今まではクラス名をそのまま使って以下のように記述していた。

hoge::fuga()

ただこれだと、命名規則等の関係でクラス名を変更してしまったら動かなくなることは自明だ。どうやって書いておくべきなんだろう、と思ってはいたけれど、必要性にも迫られなかったので(というかその都度修正したりしていたので)放置していたが、今日やっとわかった(たまたま見つけた)。正解は、

self::fuga()

でした。いわれてみれば、「parent::fuga()みたいな書き方するよな」と思うのだが、どうやらselfは完全に見過ごしていたらしい。

ちょっと恥ずかしいが勉強になった次第。

ランダム順で取得

2008/06/19 | MySQL

データをランダムに取得するには、たいていどのような仕組みにでも乱数ジェネレータ(もしくはそれらしきもの)が用意されていて、それを利用するのが便利。MySQLからランダムに値を取得する場合、以下のようにORDER BY句にRAND()関数をかませると、ランダムな順番で取得できる。

SELECT * FROM table ORDER BY RAND();

ランダムに3つ取得したいならLIMIT 0,3とかつけてあげればよい。

Smartyでフォーム(ラジオボタンとチェックボックス)

2008/06/16 | Smarty

以前は「フォーム作成 = QuickForm」なくらいQuickFormを多用したけれど、近頃はめっきりQuickFormを使用しなくなった。QuickFormにはvalidation機能もあるし、なんといってもfreeze機能が便利なのだが、QuickForm2の安定版が出ないことには、多用する勇気が出ない。
QuickFormに変わってフォーム生成はSmartyのカスタム関数と自作のライブラリを使用している。基本的にはSmartyのカスタム関数だけで十分だけど、エラーを出力したり、確認画面を出したり、Smartyだけでは事足りない部分がいくつかあるからだ。
Smartyの便利なカスタム関数でラジオボタンを生成してくれるhtml_radiosとチェックボックスを生成してくれるhtml_checkboxesの使い方をメモしておく。

■html_radios、html_checkboxes共通のオプション(★多用、☆その他)

★name
フォーム要素のname属性に相当。html_checkboxesの場合は名前の後ろに[]を自動で付加して配列形式で受け取ることができるようにしてくれる。

★options(配列で与える)
value値(配列のキー)と表示する値(配列の値)の形式で与える。

★selected
初期で選択されている値(optionsのキーを指定)。html_checkboxesの場合、配列で与えると複数の項目にチェックを入れることができる。

☆separator
それぞれの項目を区切るための文字列を指定できる。<br />を指定すれば改行で区切られる。

☆valuesとoutput
optionsの代用で値と表示をそれぞれ別の配列で指定する。

SSL、ダウンロード、session・・・

2008/06/05 | PHPの基本

とある案件でSSLを使用した。SSL環境下で、PHPを使ったファイルのダウンロードに関しては注意すべき点がある(以前PDF出力のところで少し触れた)。IEには潜在的にバグがあって、PHPを使ったSSL環境下でのファイルダウンロードがうまくできないことがあるのだ。特にセッションを使っている場合は注意が必要で、session_start関数を呼び出す前に、やっておかないといけないことがある。

session_cache_limiter(‘public’);
session_start();

上記のように一つ関数をかませるか、ダウンロード時に以下のようにヘッダを出力してやる。

header(“Cache-Control: public”);
header(“Pragma: public”);

多分、これで大丈夫。IE7でも治ってなかった。きっとMicrosoftいわく「バグじゃねえよ、仕様だよ」ってことなんだろうな。

最近のphpMyAdminの設置

2008/06/04 | PHPの基本

MySQLデータベースを操作するためのツールは、現状デファクトスタンダードといってもいいのがphpMyAdmin。現時点での最新バージョンは2.11.6だ。最近は備え付けのところが多いのだが、いざ自分で設置するとなると、昔のバージョンとは少し設定方法が違ってたりしてとまどうことがある。今回設置の際にドキュメントを少し読んだので設置方法をメモしておく。

(1)ファイルをダウンロードして解凍
(2)config.sample.inc.phpをconfig.inc.phpにリネームして編集
(3)編集した箇所はここ
 17行目付近(ここに適当な文字列20文字くらいを入れる)
 $cfg[‘blowfish_secret’] = ”
 28行目付近(接続用のIDとパスワードを入れる)
 $cfg[‘Servers’][$i][‘user’]= ‘root';
 $cfg[‘Servers’][$i][‘password’]= ‘cbb74bc';

上記でOK。これでパスワードを都度聞かれることはない。userとpasswordを設定しなければアクセスした際に入力を求められるので有効なuser/passwordを入力すればよい。

ちなみに専用サーバなどではたいていrootの初期パスワードがブランクに設定されているので、何も設定しなくてもアップロードするだけで使えるようになってしまう。セキュリティに配慮するために、rootパスワードを設定しておいたほうがいいだろう。もちろん上記のようにuser/passwordを指定するなら、別の認証を加える必要があることは言うまでもないことだけど。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net