PHPパッケージ

定義済クラス

クラス階層図クラス階層図

class.php ではインデックスファイルで利用するクラスが宣言されています。カテゴリーのプロパティを表現する cd_topic のクラスオブジェクトを基幹とし、親カテゴリー、派生カテゴリー、サイトへのリンク等を示すクラスオブジェクトと集約関係で結ばれています。

すべてのクラスは CustomDir のクラスである事を示す cd_ というプレフィックスが付いています。また cd_topic を除く他のすべてのクラスは cd_std をスーパークラスとした継承関係があります。これは単にパラメーターの宣言を省略するためだけに作られた継承モデルですので、難しく考える必要はまったくありません。

どのクラスにも、コンストラクタ以外のメソッド(メンバ関数)はありません。各メンバ変数を参照したい時は、直接変数名を指定して参照して下さい。ただし、クラスオブジェクトのメンバ変数に対し、代入は行うべきではありません。これらクラスが表現しているのは ディレクトリデータベースの一部に他なりませんが、ページに登録されたカテゴリーやサイトの要素が、表示時に動的に変化する事は有り得ないからです。クラスオブジェクトはすべて静的で変更不可能な物であるとして、扱って下さい。

cd_std

class cd_std
{
    var $level;
    var $title;
    var $resource;
}

あるカテゴリーから派生するリンク全般を表現するスーパークラスです。$levelは、そのリンクの重要度を示し、0、1、2のいずれかになります。この値はディレクトリデータベースに記録されたリンクの重要度と対応しており、詳細は以下の通りです。

$level とリンク要素
要素名 レベル
最重要カテゴリー 2
重要カテゴリー 1
一般カテゴリー 0
最重要ショートカット 2
重要ショートカット 1
一般ショートカット 0
重要サイト 1
一般サイト 0

これらはすべて、ODP が配付するディレクトリデータベースに記載されている数値を元にしています。しかし、表に記載していない親ディレクトリや関連カテゴリーと言った要素には重要度の概念がありませんので、その場合には $level に0を設定しています。

$title は、このリンクをタイトルです。カテゴリーの場合はカテゴリー名、リンクの場合はリンク先のサイトの名前等になります。

$resouce はクラスオブジェクトを一意に差し示す ID になります。これは ODP のディレクトリデータベースの r:resource 属性に当たります。カテゴリー等のサイト内リンクの場合には、カテゴリー階層を示す文字列が、登録サイトの場合にはリンク先の URL になります。

このクラスは抽象クラス的な位置付けであり、実際にインスタンスが作成される事はありません。

cd_innerlink

class cd_innerlink extends cd_std
{
    var $path;
    var $rpath;
}

サイト内へのリンクを示すクラスです。子カテゴリー、親カテゴリー、関連カテゴリー、ショートカットが、これに当たります。$path は、このリンクの絶対パスで、必ずスラッシュからはじまります。また、現バージョンは日本階層のみがサポートされていますので、実際には /16/49884 ではじまります。ただし、将来全階層がサポートされる場合を考慮し、$path に常に /16/49884 が含まれている事を前提とするようなコーディングは避けて下さい。

一方、$rpath はこのカテゴリーから日本階層までの相対パスを示しています。$rpath を利用すれば、_sys ディレクトリの位置も簡単に分かりますし、相対指定する事により環境の変化に強いコーディングを行う事ができます。

このクラスは抽象クラス的な位置付けであり、実際にインスタンスが作成される事はありません。

cd_category

class cd_category extends cd_innerlink
{
    function cd_category($level,$title,$resource,$path,$rpath)
    {
        $this->level = $level;
        $this->title = $title;
        $this->resource = $resource;
        $this->path = $path;
        $this->rpath = $rpath;
    }
};

登録カテゴリーや親カテゴリーを示すクラスです。cd_innerlink のサブクラスです。メンバ変数は増えていませんが、コンストラクタが実装されています。

cd_symbolic

class cd_symbolic extends cd_innerlink
{
    function cd_symbolic($level,$title,$resource,$path,$rpath)
    {
        $this->level = $level;
        $this->title = $title;
        $this->resource = $resource;
        $this->path = $path;
        $this->rpath = $rpath;
    }
};

ショートカットを示すクラスです。cd_innerlink のサブクラスです。このクラスは、現バージョンにおいて cd_category とまったく同じ宣言がなされていますが、将来に渡って保証されるものではありません。

cd_related

class cd_related extends cd_innerlink
{
    function cd_related($level,$title,$resource,$path,$rpath)
    {
        $this->level = $level;
        $this->title = $title;
        $this->resource = $resource;
        $this->path = $path;
        $this->rpath = $rpath;
    }
};

関連カテゴリーを示すクラスです。cd_innerlink のサブクラスです。このクラスは、現バージョンにおいて cd_category 、cd_symbolic とまったく同じ宣言がなされていますが、将来に渡って保証されるものではありません。

cd_category、cd_symbolic、cd_related がまったく同じ内容でありながら別々に宣言されているのには、2つの理由があります。ひとつはこれら3つの要素が、ODP のディレクトリデータベースにおいて多少違う構文で;表現されているからです。PHP パッケージにおいてはこれらの違いは吸収されてしまっていますが、今後、3つの要素がそれぞれ別の方向に拡張された場合、対応しやすくするためにクラスの宣言も分け、別々のクラスからインスタンスする事にしました。

ふたつ目の理由はもっと重要です。後述の$topic において、cd_category のインスタンスと、cd_symbolic のインスタンスが同一の配列に格納されます。その時、格納されたインスタンスがカテゴリーなのか、ショートカットなのかを区別する必要があります。これを実現するために PHP のクラス認識機構である get_class() を利用しており、それを実現するためにカテゴリーとショートカットを別々のクラスとしてインスタンス化しているのです。

cd_link

class cd_link extends cd_std
{
    var $description;

    function cd_link($level,$title,$resource,$description)
    {
        $this->level = $level;
        $this->title = $title;
        $this->resource = $resource;
        $this->description = $description;
    }
}

登録サイトを示すクラスです。cd_std のサブクラスです。メンバ変数 $description は、サイトの紹介文です。

cd_topic

class cd_topic
{
    var $id = '';
    var $catid = '';
    var $title = '';
    var $path = '';
    var $description = '';
    var $enccatpath = '';
    var $category = array();
    var $site = array();
    var $related = array();
    var $news = array();
    var $editor = array();
    var $parentdir = array();
    
    function cd_topic($id,$catid,$title,$path,$description,$enccatpath)
    {
        $this->id = $id;
        $this->catid = $catid;
        $this->title = $title;
        $this->path = $path;
        $this->description = $description;
        $this->enccatpath = $enccatpath;
    }
}

カテゴリー全体を表現するクラスです。このクラスのみ、cd_std から派生していません。

インデックスページをよく見てみると、さまざまな宣言や代入がありますが、実際にはcd_topic のインスタンスである $topic というグローバル変数ただひとつが宣言されている事が分かります。その他の記述は、すべて $topic のメンバ変数への代入です。

cd_topic の各メンバ変数の説明は、次のcd_topic の詳細で行います。



株式会社スプライン