特徴
2007年12月23日
最初の記事でたいそうなことを書いたが、要するに開発するためのメモをするところを準備したというところ。まず、特徴となることをいくつか挙げると
1)言語としては、PHP5を利用。データベースエンジンは、SQLite。
2)ライセンスは、GPL(Nucleus のコードを幾分か移植して使うため)。
3)軽さを追求したツールにする。
4)グローバル変数とグローバル関数は利用しない。代わりに、定数もしくはクラスのスタティックプロパティとクラスのスタティックメソッドを用いる。
5)SQLインジェクション、XSS、リモートコードインサーションなどの脆弱性が出にくくなるような仕組みを、コア側で用意する。
6)スキンはデータベースに保存せず、ファイルとして保存する。
7)Nucleusのテンプレートの概念は使わず、かわりにスキンを多層化する。
8)管理画面もスキンで記述し、自由にカスタマイズできるようにする。
現在のindex.phpとconfig.phpにいくらかこのツールの特徴が現れている。
index.php
config.php
まず、特徴の一つは、グローバルなコード実行はこの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()関数の利用により、必要なコードは使用直前にパースする事を意識したもの。
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()関数の利用により、必要なコードは使用直前にパースする事を意識したもの。