タグ ‘ php

protectedの勘違い

protectedで定義した変数は、そのクラスを継承したクラスからは参照できますが、継承していないクラスからは参照できません。これはメソッドも同様です。


私は、クラスAにprotected変数がある場合、クラスAを継承したクラスB、クラスBを継承したクラスCからも参照できるものだと思っていました。しかし実際は、孫クラスにあたるクラスCからは参照できませんでした。よくドキュメントに書いてある、サブクラスというのは、子クラスのみをさしていたのですね。


javaのときはどうだったか覚えてないですが、phpではこうでしたってことでメモ。

array_pushで知らなかったこと

array_pushのマニュアルに書いてありましたが、知りませんでした。


【注意: もし配列にひとつの要素を加えるために array_push() を使用するなら、

 関数を呼ぶオーバーヘッドがないので、$array[] = を使用するほうがいいです。 】


忘れないようにメモ。

ctype関数

Zendのソースを見ているときに見つけたこれらの関数。


今まで正規表現でチェックしてたところに使えるので、メモ。

正規表現でやればいいと思ったりもするけど、慣れない人には

正規表現ってすごく分かりづらい。


だから、こういう関数を使うのはいいと思っています。


ctype_ alnum 英数字

ctype_ alpha 英字

ctype_ digit 数字

ctype_ lower 小文字

ctype_ upper 大文字

_autoloadが便利

偶然見つけたメソッド __autoload。

最近までphp4ばかり使ってたので、マジックメソッドには疎いのです。


たまたま見つけたサイトで、マジックメソッドについて読んでみて、

早速__autoloadから試してみました。結果は便利です。


私は、phpでプログラムを新規で作る場合は、Zend Frameworkを利用していますが、

だいたいこんなディレクトリ構造です


web/index.php

lib/models/xxxxModel.php

lib/validates/xxxxValidate.php

lib/dbs/xxxxxDb.php

lib/controller/xxxxxController.php


小規模なものしか作っていないので、この階層分けでなんとかなってます。


そこでindex.phpに以下のように __autoloadを追加したら、

各ファイルで、Zend_Loader::loadClassや、require_onceを

記述する必要がなくなってとても楽です。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function __autoload($className)
{
  if (preg_match("/^Zend_/", $className)){
    Zend_Loader::loadClass($className);
    return;
  }
 
  if (preg_match("/Model$/", $className)){
    require_once('models/' . $className . '.php');
    return;
  }
 
  if (preg_match("/Db$/", $className)){
    require_once('dbs/' . $className . '.php');
    return;
  }
 
  if (preg_match("/Validate$/", $className)){
    require_once('validates/' . $className . '.php');
    return;
  }
}

文字コード検出

久々で忘れていたので、ここにメモっておきます。


文字コードを検出するメソッド。

mb_detect_encoding

return top