クラスのオートローディング Autoloading

CMSimple_XH 1.7.0以降、「クラスのオートローディング:class autoloading 」を、CMSimple_XHのコアの関数: XH_autoload() に組み込んでます。
プラグインでは、この XH_autoload() の使用をおススメします。
XH_autoload()PSR-0 に準拠したCMSimple_XHの基本的なフォルダ構造に合わせてます。つまり<Vendor Name>が実際に<Plugin Name> (またはコアクラスの場合はXH )になっています。これはプラグインのclasses/ フォルダにマップされます。

参考1)XH_autoload() がオートローダー用関数として登録されてる

spl_autoload_register('XH_autoload');//cmsimple/cms.php Lin245 (ver1.7)

参考2)PSR-0 :オートローディング規約
As of CMSimple_XH 1.7.0 the core uses class autoloading, and the autoloader (XH_autoload()) can also be used by plugins. It works very similar to PSR-0 , but an adjustment has been made to better suite the tradionational folder structure of CMSimple_XH, namely that the <Vendor Name> has actually to be the <Plugin Name> (or XH in case of core classes), which maps to the classes/ folder of the plugin.

例として 下記のファイル構造をもつ Fooプラグイン( plugins/foo/ )で考えます。・・簡潔にするために無関係なファイルやフォルダは省略してます
Let's consider a fictious plugin named Foo with the following filesystem structure (irrelevant files and folders ommitted for brevity):


これらのクラスを参照するには、完全修飾クラス名( \Foo\Bar\Baz および \Foo\Qux )、またはこれらの完全修飾クラス名に解決される短い形式を使用できます。
This plugin declares two classes, namely Baz and Qux. To refer to these classes you can use the fully qualified class name, i.e. \Foo\Bar\Baz and \Foo\Qux, respectively, or any short form which resolves to these fully qualified class names.


古いスタイルの擬似名前空間のアンダースコア( _ )もサポートしています。
クラスローダーは、適切な名前空間区切り文字と同じ扱いで、オートローダー用関数( XH_autoload() ) がclass_alias() を作成します。古いスタイルの擬似名前空間のアンダースコア( _ )もサポートしています。
上の例のFooプラグインに関しては、クラス名として Foo_Bar_Baz と Foo_Qux を使用することもできます。
これは後方互換性を目的としています。特に、CMSimple_XH 1.6では名前空間を使用していないコアクラスが対象です。
Note that the class loader also supports old style pseudo namespacing with underscores (_), which are treated identical to proper namespace separators, and that the autoloader creates class_alias()es. So with regard to the example Foo plugin above, you can also use Foo_Bar_Baz and Foo_Qux as class names. This is meant for backward compatibility purposes, most notably for core classes which didn't use namespaces in CMSimple_XH 1.6. For new developments proper namespacing is recommended.


異なるファイルシステムの大文字と小文字の区別についての問題を避けるためには、クラス名がPHPでは大文字と小文字を区別していなくても、宣言されているファイルの名前と全く同じようにすべてのクラス名を記述する必要があります。 ただし、名前空間の名前は小文字バリアントにマップされるため、 classes/ 以下のサブフォルダは小文字にする必要があります
To avoid issues regarding the case (in)sensitivity of different file systems, you have to write all class names exactly like the name of the file they're declared in, even though class names are case insensitive in PHP. The names of Namespaces, however, are mapped to the lower case variant, so all subfolders of classes/ should be in lower case.