オブジェクト指向PHP

最新情報

doctest

スクリプト本体にコメントとして記述したテストコードを、テストとして実行する。

ソースコードにテストコードを記入するため、手軽にテストを書くことができる。反面、テストコードの量が増えるとソースの可読性が落ちる可能性が高い。単体テストのすべてをdoctestで行うのは非現実的かもしれない。

元々は、Python doctestらしい。PHP では、rhaco の他、Maple や symfony などのフレームワークで、python の doctest に近いものを実装する試みがなされている。

タグ

Selenium

Selenium は、ブラウザの動作(マウスクリックやフォーム入力等)を記憶しておき、動作手順を再生可能。
マウスの動作だけでなく、特定のテキストやアンカーリンクの有無のチェックにも重宝する。

複数画面に渡る操作を自動実行可能。ブラウザ自体でテストするので、AJAX 等にも対応。

テストコードは HTML テーブルで記述される。Firefox のプラグイン selenium IDE を利用すると、テストコードが作成しやすい。

target 属性が含まれるアンカーリンク等で、期待通りの動作をしないケースがある。

本来の目的とは外れるが、同じ動作を繰り返し行うのが楽になることを利用して、ツイッター自動投稿等に応用することができる。

タグ

Unexpected

想定外の変数/定数/関数/オブジェクト等が見つかった場合に表示されるエラーメッセージ。Parse error: syntax error, unexpected T_STRING、Parse error: syntax error, unexpected T_VARIABLE、Parse error: syntax error, unexpected T_FUNCTION 等と表示される。

この場合、括弧の綴じ忘れ等のことも多いが、必要とされるモジュール等の不足、PHP バージョンの差異等が原因のこともある。ショートオープンタグの利用可否に依存しているケースもある。

環境により出たり出なかったりする場合は、PHP のバージョンや php.ini の設定、phpinfo() の情報等を比較すると、解決の糸口が見つかるかもしれない。

タグ

Deprecated

将来動作しなくなる(廃止予定)の関数等を使用している場合に表示される警告メッセージ。PHP5.3 で、E_DEPRECATED というエラーレベルが追加された。

PHP4 互換のスクリプトや、等では多くのコードが引っかかるようである。また、ereg() が deprecated となるようなので、preg_match() を使うのが好ましい。

なお、php.ini で
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
とすればエラー表示はされないが、本質的に解決するわけではない。スクリプトの修正/更新を早急にすべきであろう。

タグ

画面が真っ白

ブラウザ画面が真っ白になることがあります。何らかのエラーが発生していることが多いですが、様々な理由(下記参照)が考えられるため、エラーメッセージを確認すべきです。

  • スクリプトにエラーがある
  • PHP バージョンの違い
  • ライブラリ等の不足
  • セーフモードによる制限

エラーメッセージがブラウザに表示されない場合、エラーログファイルに保存される設定になっていることが多いです。エラーログファイルを閲覧すると、具体的なエラー内容が分かるはずです。

なお、ログファイルの場所は、サーバーにょって異なることがあります。お使いのサーバーの設定マニュアル等を参考にしてください。

タグ

get_class_methods

クラスで定義されているメソッドを配列として返す。引数にクラス名を指定する。

get_class_methods('クラス名')

メソッド一覧には、コンストラクタ __construct も含まれる。

private, protected 指定のメソッドについては、get_class_methods を呼び出すと、アクセス権のあるメソッド名のみが返される。例えば、クラスの外部で get_class_methods を実行すると、public メソッドのみの配列を生成する。

プロパティの一覧を取得する場合は、get_class_vars を使用する。
引数はクラス名だが、オブジェクト名でも動作する。

タグ

タイプヒンティング

PHP 5 から、タイプヒンティング機能が使えるようになりました。関数等に渡すパラメータがどんな型なのかを予め設定しておくことができます。とはいえ、対応しているのはオブジェクト型、(5.1以降で)配列型のみです。整数や文字列は未対応です。

型制限が緩いのが PHP の特徴であることは間違いない (小さいプログラムを作るという観点では楽に開発できるが、型がいい加減なことに起因するバグも起こりやすい) ので、タイプヒンティングはあまり PHP 向きではないかもしれません。

タグ

CodeIgniter

CodeIgniter とは、PHP4/5対応の軽量フレームワークです。PHP を利用するフレームワークは Zend Framework, Symfony, Ethna, CakePHP, Maple 等いろいろあります。Joomla, Drupal, Ez publish 等の CMS も、広い意味ではフレームワークといえるでしょう。

フレームワークとして、CodeIgniter を見てみると、凄くシンプルな作りになっているのが特徴でしょう。機能の豊富さを売りにするフレームワークが多い中で、対照的です。学習時間も含めて考えると開発効率は非常に良いと思います。PHP らしいフレームワークだと言えるでしょう。(他のフレームワークだと規模が大きすぎるように思います。)

PHP4 互換ですが、オブジェクト指向プログラミングも対応しています。フォークとして、PHP5 専用のフレームワーク Kohana もあるようです。

タグ

Cannot instantiate abstract class

オブジェクト指向プログラミングでは、抽象クラスを作成することができる。抽象クラスは、クラスの雛形のようなもので、クラスで定義されるべきメソッド等を規定するものです。

抽象クラスは直接インスタンス化することはできません。抽象クラスを継承するクラスを作成し、そのクラスのインスタンスを作成するようにしてください。

もし、抽象クラスのインスタンスを生成しようとすると、下記のようなエラーメッセージが表示されます。


Fatal error: Cannot instantiate abstract class ClassName

タグ

401 Authorization Required

認証が必要なページを閲覧し、認証に失敗したとき、サーバーは401エラーレスポンスを返します。

原因としては、まずユーザー名あるいはパスワードが正しくない、というのが考えられます。入力ミスや大文字小文字の間違い等を確かめてみましょう。

ブラウザやセキュリティソフトの設定によっては認証できないこともあるようですので、お使いのソフトのマニュアル等を参照してください。

それでも解決しない場合は、サーバー側の設定ミスの可能性が考えられます。

タグ