General

特徴

2007年12月23日

最初の記事でたいそうなことを書いたが、要するに開発するためのメモをするところを準備したというところ。まず、特徴となることをいくつか挙げると

1)言語としては、PHP5を利用。データベースエンジンは、SQLite。
2)ライセンスは、GPL(Nucleus のコードを幾分か移植して使うため)。
3)軽さを追求したツールにする。
4)グローバル変数とグローバル関数は利用しない。代わりに、定数もしくはクラスのスタティックプロパティとクラスのスタティックメソッドを用いる。
5)SQLインジェクション、XSS、リモートコードインサーションなどの脆弱性が出にくくなるような仕組みを、コア側で用意する。
6)スキンはデータベースに保存せず、ファイルとして保存する。
7)Nucleusのテンプレートの概念は使わず、かわりにスキンを多層化する。
8)管理画面もスキンで記述し、自由にカスタマイズできるようにする。

現在のindex.phpとconfig.phpにいくらかこのツールの特徴が現れている。

index.php
<?php

    require('./config.php');
    skin::selector();

config.php
<?php

    // main jeans directory
    define('DIR_JEANS', dirname(__FILE__) . '/jeans/');
    // path to media dir
    define('DIR_MEDIA', dirname(__FILE__) . '/media/');
    // extra skin files for imported skins
    define('DIR_SKINS', dirname(__FILE__) . '/skins/');

    // these dirs are normally sub dirs of the jeans dir, but 
    // you can redefine them if you wish
    define('DIR_PLUGINS', DIR_JEANS . 'plugins/' );
    define('DIR_LANG',    DIR_JEANS . 'language/');
    define('DIR_LIBS',    DIR_JEANS . 'libs/'    );
    define('DIR_SQLITE',  DIR_JEANS . 'libs/sqlite/');

    // Hash Salt
    define('HASH_SALT','');

    // Include core and initialize
    require(DIR_LIBS.'core.php');
    core::init();

まず、特徴の一つは、グローバルなコード実行はこのindex.phpとconfig.phpだけで行われること。その他のコードはすべてクラスのメソッド内で行われる(__autoload()関数は例外でグローバル関数であり、ここからcoreクラスのメソッドが呼び出される)。
 グローバル変数も使用しない($_POST、$_GETなどのスーパーグローバルは別)。DIR_LIBSなどは見てのとおり、定数として定義する。これにより、DIR_LIBSが外部からの値で置き換えたり出来ないことに加え、『global $DIR_LIBS;』などの設定なしにDIR_LIBSにアクセスすることが可能になる。
 コアの機能へアクセスする際は、見てのとおり、クラスのスタティックなメソッドを経由する(core::init() skin::selector() など)。Nucleus は $manager などのグローバル変数へオブジェクトを作成しているが、この場合だとやはり『global $manager;』などの設定が必要になる。一方で、スタティックなメソッドを経由するJeansのやり方だと、『global $manager;』などと書かなくても良い。
 また、グローバル関数でなくてクラスのメソッドを呼び出すようにしているのは、__autoload()関数の利用により、必要なコードは使用直前にパースする事を意識したもの。

コメント

コメントはありません

コメント送信