残り一年! PHP4からPHP5への移行

第3回 オブジェクトの仕様変更の続きとインタフェース

この記事を読むのに必要な時間:およそ 5 分

前回に引き続き,オブジェクト仕様の変更について解説します。PHP5になってからオブジェクト指向プログラミング機能が強化され,Javaなどのオブジェクト思考言語に慣れたユーザにはより使いやすい言語仕様を持つようになりました。まれとは思いますが,PHP5からの新しい機能であるインターフェースも移行時に問題となる可能性も考えられるので,定義済みインターフェースも紹介しています。インターフェースとはメソッド定義がない抽象クラスのようなものです。よく分からない場合はプロパティ・メソッドの中身がないクラスのようなものと考えてください。

特に記述がない場合,PHP4はPHP4.4.x,PHP5はPHP5.2.xを意味します。

定義済みクラス

モジュールをロードするとクラスが定義される場合があるので,環境により定義済みクラスは異なります。ここではデフォルトのXAMMP for Windows 1.6.2のPHP4とPHP5の定義済みクラスの一部を紹介します。

PHP4の定義済みクラス

C:\xampp\php\php4>phpcli.exe -r "print_r(get_declared_classes());"
Array
(
    [0] => stdClass
    [1] => __PHP_Incomplete_Class
    [2] => Directory
    [3] => COM
    [4] => VARIANT
    [5] => swfshape
    [6] => swffill
以下省略

PHP5の定義済みクラス

C:\xampp\php>php.exe -r "print_r(get_declared_classes());"
Array
(
    [0] => stdClass
    [1] => Exception
    [2] => ErrorException
    [3] => COMPersistHelper
    [4] => com_exception
    [5] => com_safearray_proxy
    [6] => variant
    [7] => com
    [8] => dotnet
    [9] => ReflectionException
    [10] => Reflection
    [11] => ReflectionFunctionAbstract
    [12] => ReflectionFunction
    [13] => ReflectionParameter
    [14] => ReflectionMethod
    [15] => ReflectionClass
    [16] => ReflectionObject
    [17] => ReflectionProperty
    [18] => ReflectionExtension
    [19] => DateTime
    [20] => DateTimeZone
    [21] => LibXMLError
    [22] => __PHP_Incomplete_Class
    [23] => php_user_filter
以下省略

ここでは省略していますが,get_declared_classes関数の戻り値を参照すると,PHP5には例外クラス,リフレクションAPI関連クラス,XML関連クラスなどが定義されていることが分かります。

PHP5からはInterfaceもサポートしています。このためInterfaceとして定義された名前もクラス名として利用できません。

C:\xampp\php>php.exe -r "print_r(get_declared_interfaces());"
Array
(
    [0] => Traversable
    [1] => IteratorAggregate
    [2] => Iterator
    [3] => ArrayAccess
    [4] => Serializable
    [5] => Reflector
    [6] => RecursiveIterator
    [7] => OuterIterator
    [8] => Countable
    [9] => SeekableIterator
    [10] => SplObserver
    [11] => SplSubject
)

PHP5のデフォルトの定義済みクラスで,最も注意が必要と思われるクラス名はDateTimeクラスです。

例:同じクラス名の利用

<?php
class DateTime{}

$obj = new DateTime;
?>

実行例:

Fatal error: Cannot redeclare class DateTime in C:\xampp\php\- on line 2

どのクラス/インターフェース名でも同じですが,定義済みクラス名またはインターフェース名を利用しようとすると,Fatalエラーとなりスクリプトの実行が停止します。同じクラス名を定義している場合,クラス名を変更しなければなりません。

著者プロフィール

大垣靖男(おおがきやすお)

University of Denver卒。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て,エレクトロニック・サービス・イニシアチブ有限会社を設立。
オープンソース製品は比較的古くから利用し,Linuxは0.9xのころから利用している。オープンソースシステム開発への参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトでは,PostgreSQLモジュールのメンテナンスを担当している。

URLhttp://blog.ohgaki.net/

著書

コメント

コメントの記入