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エラーレスポンスを返します。

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

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

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

タグ

WARNING error

実行時に生じたエラーのうち、致命的ではないものがWARNINGになります。NOTICEよりは重い警告ですが、ERRORよりは軽いです。WARNINGエラーは、スクリプト実行が続けられるため、エラーと気づきにくいことがあります。

主なWARNINGには、以下のようなものがあります。

  • Missing argument: 関数の引数が不足しています。一見正常に動作しているように見えても、期待した挙動では無い可能性があります。
  • Unexpected character in input: 入力に想定外の文字が混入しています。文字コードが正しく設定されていないために起こることがあります。シフトJISだと一部の文字で2バイト目が制御コードと同じになるため、このエラーが出ることがあります。
  • Cannot modify header information: ヘッダー情報を設定できなかったときに表示されます。header関数は<head>タグの前に記述してください。スクリプト先頭の空行があるとこのエラーが出ることがあります。

タグ

PARSE error

スクリプトをパースする時(構文解析時)に発生したものが PARSE ERROR になります。重大なエラーとみなされ、スクリプト実行が中断されます。主な PARSE には、以下のようなものがあります。

  • syntax error: 構文に誤りがあります。括弧の不一致、末尾のセミコロン忘れ等が原因のことが多いです。XML を扱う場合、XML タグがショートオープンタグとして認識されている可能性があります。(この場合は、php.ini で short_open_tag = Offに設定してください。)

この他、PHP のバージョンが古い等の理由で、うまく解釈できなかった場合も、PARSE error になることがあります。(unexpected T_STRING、undefined XXX のような表記になるようです。) PHP のバージョンを確認するようにしましょう。

タグ

NOTICE error

スクリプト実行には影響しなかったが、潜在的にエラーの可能性がある状況で発行されるのが、NOTICEです。

主なNOTICEエラーは、以下のようなものがあります。

  • Notice: Use of undefined constant 未定義の定数を使用
  • Notice: Undefined variable 未定義の変数を使用
  • Notice: Undefined Index 未定義の配列を使用
  • Notice: Undefined offset 戻り値の個数が合わない

タグ

__getと__set

存在しないプロパティにアクセスした時に、実行されるメソッドを定義することができます。(private属性が付与されているプロパティをクラス外から呼び出した場合、クラス外からは見えないため、存在しないとみなされます。)そのための特殊なメソッドが、__get(アンダーバー2個)です。引数は呼び出そうとしたプロパティ名です。


class Sample {
public function __get($propName) {
return $propName . " does not exist." ;
}
}

上のソースに加えて下のように書くと、

$obj = new Sample();
echo $obj->hoge;

以下のような結果が返されます。

hoge does not exist.

タグ

例外処理

PHP5から、例外処理がサポートされるようになりました。エラーが発生した場合の処理が、例外オブジェクト生成→例外オブジェクトがエラーメッセージ等を返す、という形になります。例外に関する処理をまとめることができるので、スクリプトコードがすっきりし、可読性向上にも役立ちます。

→この記事の続きを読む

タグ