core
[ class tree: core ] [ index: core ] [ all elements ]

Class: PURE

Source Location: /package/core/foundation.inc

Class Overview


Ag:PUREの基盤となる関数群と標準エラーハンドラを格納するクラスです。


Constants

Methods



Class Details

[line 273]
Ag:PUREの基盤となる関数群と標準エラーハンドラを格納するクラスです。

PUREクラスはAg:PUREの基盤となる関数群や、標準のエラーハンドラを定義します。 以下の機能を導入します。

  1. PHP4までの通知、警告ベースのエラーハンドリングをPHP5以降で導入された例外ベースのエラーハンドリングで置き換えます。 PHP4以前で導入されている標準のエラーハンドラをPUREクラスは導入します。 PUREクラスで導入された標準エラーハンドラはエラーレベルに応じた例外を発生させ、エラーを例外に隠蔽します。 実行時はあたかも通知エラー、警告エラーが例外として発生しているように振る舞います。 またキャッチされない例外をキャッチする標準の例外ハンドラを導入し、画面にJAVAライクなスタックトレースを表示することが出来ます。
  2. Ag:PURE標準のパッケージの概念を導入します。 PHPには標準でインクルードパスの定義がありますが、PUREで用意されるパッケージの概念はインクルードパスとは別に用意されます。 パッケージの概念は下記の外部モジュールのロードと外部リソースのロードで利用されます。
  3. PURE標準のパッケージの概念に乗っ取ってJAVAライクなimport機能を提供します。 モジュール単一でのimport、パッケージ単位のimport、複数のパッケージルート登録による一部モジュールの置き換え(パッチ当て)を可能とします。
  4. PURE標準のパッケージの概念に乗っ取ってリソースをロードすることが出来ます。




[ Top ]


Class Methods


static method addFinalFilter [line 401]

static void addFinalFilter( IFinalFilter $filter)

終了処理で実行されるフィルタを登録します。

終了処理でバッファリングされた出力内容に対して適用されるフィルタを登録します。 フィルタは登録された順序の逆順で実行されます。 従って後から追加されたフィルタの方が先に実行されます。




Tags:

access:  public


Parameters:

IFinalFilter   $filter   追加したいフィルタ

[ Top ]

static method addPackageRoot [line 796]

static void addPackageRoot( string $packageRoot)

パッケージルートを追加設定します。

パッケージを検索するルートのディレクトリ(パッケージルート)を追加設定します。 追加設定されたパッケージルートは、それまで設定されていた全てのパッケージルートに優先されて検索されます。

パッケージルートはセキュリティ上の問題とOS互換性の問題より、半角英数とハイフン、アンダーバーで命名されたディレクトリに限定されます。 (Windows環境に限ってドライブレターの":"が許可されます) また物理的に存在するディレクトリである必要があります。




Tags:

throws:  EIlligalParameterException 不正なディレクトリ
access:  public


Parameters:

string   $packageRoot   追加したい検索ルート

[ Top ]

static method createDefaultExceptionScreen [line 675]

static string createDefaultExceptionScreen( PURE_UncatchExceptInfo $exceptInfo)

標準の例外画面を生成して返します。

標準のエラー画面はPROJECTクラスへのプロジェクト内容の設定により、表示が変化します。 PROJECTクラスへプロジェクト名を設定している場合、エラー画面にはAg:PUREのライブラリ名ではなく、プロジェクト名とそのバージョンが表示されます。 また画面下部の著作権表示ではAg:PUREを利用していることを表す"with"が付加されるようになります。




Tags:

return:  生成された例外画面のHTML
access:  public


Parameters:

PURE_UncatchExceptInfo   $exceptInfo   発生した例外

[ Top ]

static method defaultErrorHandler [line 529]

static void defaultErrorHandler( int $errno, string $errstr, string $errfile, int $errline)

標準のエラーハンドラです。

defaultErrorHandlerメソッドは標準のエラーハンドラとして初期化処理で自動的に登録されます。 以降、実行中に発生したエラーはdefaultErrorHandlerメソッドにより捉えられます。 捉えられたエラーはそれぞれ例外にマッピングされ、スローし直されます。 これにより従来のPHP4までのエラー処理をPHP5から導入された例外処理で捉えることが可能になります。

Ag:PUREではキャッチされた全てのエラーは例外にマッピングされスローされます。 捉えられたエラーはそれぞれ以下の例外にマッピングされます。

E_ERROR、E_CORE_ERROR、E_COMPILE_ERROR、E_USER_ERROR: EErrorException例外にマッピングされます。

E_WARNING、E_CORE_WARNING、E_COMPILE_WARNING、E_USER_WARNING: EWarningException例外にマッピングされます。

E_NOTICE、E_USER_NOTICE: ENoticeException例外にマッピングされます。

E_STRICT: EStrictException例外にマッピングされます。

E_RECOVERABLE_ERROR: ERecoverableErrorException例外にマッピングされます。

E_PARSE: EParseException例外にマッピングされます。

不明なエラーが捉えられた場合、EUnknownException例外にマッピングされます。

注意: set_error_handler関数の制限により、E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING は実際には捉えられることがないことに注意してください。 これらのエラーではPHPは従来のエラー処理フローを実行します。




Tags:

access:  public


Parameters:

int   $errno   発生したエラーのレベル
string   $errstr   エラーメッセージを文字列
string   $errfile   エラーが発生したファイル名
int   $errline   エラーが発生した行番号

[ Top ]

static method defaultExceptionHandler [line 568]

static void defaultExceptionHandler( Exception $except)

標準の例外ハンドラです。

キャッチされなかった例外は最終的にdefaultExceptionHandlerメソッドにより捉えられます。 捉えられた例外は例外画面に表示され、スクリプトの実行は強制的に停止させられます。




Tags:

access:  public


Parameters:

Exception   $except   発生した例外

[ Top ]

static method finalization [line 456]

static string finalization( string $buffer)

PUREクラスの終了処理を行います。

終了処理はinitializationメソッドで有効にされたアウトプットバッファリングが終了する際に実行されます。 終了処理ではバッファリングされた内容を元に、各種の終了フィルタを実行することが出来ます。 終了フィルタが全く指定されていない場合には、終了処理は何もせずにバッファリングされた内容をそのまま出力します。

注意: 終了処理内でパースエラーなどのスクリプトの実行が不可能になる致命的なエラーが発生した場合、エラー内容は画面には表示されずブランク画面が表示されてしまいます。 この様な場合にはPHP標準のエラーログ出力を有効にしていないとエラー内容の追跡が難しくなってしまいます。 特に複雑な終了フィルタを実装する際には注意してください。




Tags:

return:  出力結果
access:  public


Parameters:

string   $buffer   バッファリングされた内容

[ Top ]

static method findPackageModules [line 909]

static void findPackageModules( string $path, [string $ext = "inc"], [bool $unique = true], [bool $abend = true])

パッケージに含まれるモジュールの一覧を取得します。

指定のパッケージから指定の拡張子のモジュールを検索して、そのモジュールの一覧を返します。 パッケージの記述方法は以下になります。

  1. パッケージ内の単一のモジュールを検索する場合、"packageName1.packageName2.moduleName" の様に指定します。 この指定の場合、パッケージルート以下の "packageName1/packageName2" ディレクトリ内で、名前が "moduleName" であり、拡張子が指定の物であるモジュールが検索にヒットします。
  2. パッケージ単位で一括検索したい場合、"packageName1.packageName2.*" の様に指定します。 この指定の場合、パッケージルート以下の "packageName1/packageName2" に格納されている拡張子が指定の物である全てのモジュールが検索にヒットします。 複数のモジュールが検索にヒットした場合はファイル名の昇順で列挙されます。
パッケージ単位のインポートの場合、モジュールのインポート順序が重要な場合があります。 例えばモジュールsuperClass.incで定義されているクラスをモジュールsubClass.incで定義されるクラスで継承しているとします。 この場合ファイル名順であればsubClass.incが先に読み込まれてしまいますので、パース時に致命的なエラーが発生してしまいます。 この様な状況を回避するためにはパッケージ情報ファイル"package.xml"をパッケージ内に用意します。 package.xmlは以下のような形式で作成される簡単なXMLファイルで、パッケージの略説と、モジュールの一覧、参照順序を定義します。

 <?xml version="1.0" encoding="UTF-8" ?>
 <package>
     <name>Sample Package file</name>
     <description>
         Package file description.
     </description>
     <modules>
         <module file="superClass.inc" />
         <module file="subClass.inc" />
     </modules>
 </package>

モジュールは標準のパッケージルートと、addPackageRoot メソッドによって登録された追加のパッケージルートの双方で検索されます。 複数のパッケージルートで同一名称のモジュールが見つかった場合、返却される一覧は$unique引数の指定に依存します。 $uniqueにtrueを指定した場合、優先されるパッケージルート上のモジュールが優先されて返されます。 即ち、addPackageRoot メソッドによって後から追加されたパッケージルートが最優先になります。 $uniqueにfalseを指定した場合、複数のパッケージルートで見付かった全てのモジュールが列挙されます。 通常、$uniqueにtrueを指定するのはインポートするモジュールを検索する処理、falseを指定するのはマージするリソースモジュールを検索する処理です。

なお、同じ名称を持ったパッケージが複数のパッケージルート配下に存在し、かつ同名のモジュールが存在する場合、上記のモジュールの参照順序は保証されないことに注意してください。

指定のモジュール、パッケージが見付からなかった場合、$abend引数の値により処理が異なります。 $abendが真の場合、モジュールが見付からなければEModuleNotFoundException例外、パッケージが見付からなければEPackageNotFoundException例外がそれぞれ発生します。 $abendが偽の場合、メソッドは空の配列を返します。




Tags:

throws:  EModuleNotFoundException 不明なモジュール
throws:  EIlligalParameterException パッケージ指定が不正
throws:  EPackageNotFoundException 不明なパッケージ
access:  public


Parameters:

string   $path   パッケージパス
string   $ext   拡張子
bool   $unique   モジュール名をユニークにするか否か
bool   $abend   モジュール、ないしパッケージが見付からなかった際に例外を発生するか否か

[ Top ]

static method getMessage [line 1155]

static string getMessage( string $msgId, [array $args = false], [string $msgCategory = "@"])

メッセージ設定ファイルからメッセージを取得して返します。

メッセージ設定ファイルは標準で"core.message"になり、loadIniメソッドにより取得されます。 プロジェクトで固有のメッセージ設定ファイルを保持したい場合には、addPackageRootメソッドにてパッケージルートを追加し、"core.message"モジュールを設置することでマージすることが出来ます。

$msgId引数にはメッセージIDを渡します。 メッセージIDは設定ファイルにおける値名に相当し、大文字と小文字は区別されません。

$msgCategory引数にはメッセージのカテゴリを渡します。 メッセージカテゴリは設定ファイルにおけるセクション名に相当し、大文字と小文字は区別されません。 省略した場合には無名のセクションに属している値が利用されます。

一般に、メッセージIDにはプレフィックスを定義します。 Ag:PUREでは一般化されたメッセージのメッセージIDには"ERR-"を、 Ag:PUREのコアライブラリが発生させる固有のメッセージIDには"CORE-"を、 Ag:PUREの標準ライブラリが発生させる固有のメッセージIDには"PURE-"を、 Ag:SSXが発生させる固有のメッセージIDには"SSX-"を利用します。 なおプレフィックス"CORE-"、"PURE-"と"SSX-"は予約されています。 またプレフィックス"ERR-"に関してはメッセージID"ERR-00001"から"ERR-09999"を予約しています。 メッセージを追加定義したい場合には"ERR-10000"以降を利用するか、プレフィックスを分けてください。

$args引数にはメッセージに当てはめるパラメータを配列で指定します。 メッセージ内に存在するプレースフォルダに対応するキー名が配列に指定されていれば、対応する値に置き換えられます。 例えば、配列のキーに"key"という文字列が存在した場合、メッセージ中の"{key}"が置き換えられます。

メッセージが取得できない場合、EMessageNotFoundException例外が発生します。




Tags:

return:  取得されたメッセージ
see:  PURE::loadIni()
see:  PURE::addPackageRoot()
throws:  EMessageNotFoundException メッセージID、メッセージカテゴリが不正
access:  public


Parameters:

string   $msgId   メッセージID
array   $args   メッセージパラメータ
string   $msgCategory   メッセージカテゴリ

[ Top ]

static method getStackTrace [line 625]

static array getStackTrace( $except)

スタックトレースを生成します。

例外オブジェクトと例外オブジェクトが保持するバックトレース情報より、JAVAのスタックトレースライクな情報を生成して配列に返します。




Tags:

return:  成形済みの配列
access:  public


Parameters:

Exception   $except   例外

[ Top ]

static method hasStatus [line 367]

static bool hasStatus( int $flags)

Ag:PUREのステータスに指定のフラグの何れかが立っているか否かを判定します。



Tags:

return:  判定結果
access:  public


Parameters:

int   $flags   判定したいフラグ

[ Top ]

static method import [line 1039]

static void import( string $path)

モジュールをインポートします。

importメソッドはAg:PURE標準のモジュールインポート機構を提供します。 インポートされるモジュールはfindPackageModulesメソッドにより拡張子 "inc" のモジュールが検索されます。 また実際のインポート処理はrequire_once関数が利用されますので、二重インポートにより初期化処理が多重に流れるようなこともありません。

一度インポートされたパスはリクエストが終了するまで記憶され、再度のインポートが指定された際にはスキップします。 モジュールのインポートは内部的にはrequire_once言語構造のラッパですのでモジュールの再インポートはありませんが、この処理はパッケージ解析のコストを削減します。

パッケージ名の記述方法に関してはfindPackageModulesメソッドを参照してください。




Tags:

see:  PURE::findPackageModules()
throws:  EIlligalParameterException パッケージ指定が不正
throws:  EModuleNotFoundException 不明なモジュール
throws:  EPackageNotFoundException 不明なパッケージ
access:  public


Parameters:

string   $path   パッケージへのパス

[ Top ]

static method initialization [line 413]

static void initialization( )

PUREクラスの初期化処理を行います。

initializationメソッドはコアライブラリの初期化処理中に自動的に呼び出されますので、重複して呼び出さないで下さい。 PUREクラスは初期化されるとアウトプットバッファリングを有効にします。 これは標準の例外ハンドラが出力するエラー画面を正常に表示するために重要です。




Tags:

access:  public


[ Top ]

static method isCLI [line 377]

static bool isCLI( )

PHPがCLIで実行されているか否かを返します。



Tags:

return:  PHPがCLIで実行されているか否か
access:  public


[ Top ]

static method isWindows [line 387]

static bool isWindows( )

PHPがWindows上で実行されているか否かを返します。



Tags:

return:  PHPがWindows上で実行されているか否か
access:  public


[ Top ]

static method loadIni [line 1074]

static array loadIni( string $path, [bool $case = -1])

設定ファイル(*.ini)を読み込みます。

Ag:PURE管理下のパッケージからINIファイルを読み込み、その解析結果を配列にして返します。 読み込まれるINIファイルは findPackageModules メソッドにより拡張子 "ini" のモジュールが検索されます。

検索結果は二次元配列で返されます。 一次元目はセクション名、二次元目は値名となります。 無名のセクションの値やセクションに属していない値のセクション名は"@"に統一されます。

$case引数にはセクション名と値名を大文字ないし小文字に自動的に統一するか否かを指定します。 省略した場合はセクション名と値名は設定ファイルに記述されている値がそのまま記憶されます。 大文字に統一したい場合にはCASE_UPPER定数、小文字に統一したい場合にはCASE_LOWER定数を指定してください。

複数のINIファイルがヒットした場合、同一セクションの値は同一のセクションにマージして格納されます。 同一セクション内に同一の値名を持つ複数の項目が見つかった場合、先にヒットした方が有効になります。 即ち、同一モジュール内ならば先にヒットした方、同一パッケージ内ならばファイル名が若い方、異なる検索ルートならば後から追加された検索ルート配下の値が優先されます。




Tags:

return:  INIファイル解析結果の配列
throws:  EModuleNotFoundException 不明なモジュール
throws:  EIlligalParameterException パッケージ指定が不正
throws:  EPackageNotFoundException 不明なパッケージ
access:  public


Parameters:

string   $path   パッケージへのパス
bool   $case   セクション名、値名を大文字・小文字に統一するか否か

[ Top ]

static method ob_end_clean_all [line 598]

static void ob_end_clean_all( [bool $all = false])

PUREクラスのfinalization出力ハンドラの登録以降に追加された出力バッファに溜め込まれたキャッシュを全て破棄します。

出力ハンドラのリストからPUREクラスのfinalizationメソッドが消滅するまでob_end_clean関数を繰り返します。 主に標準の例外ハンドラでエラー画面を出力する前や、任意の形式のダウンロードを行う前にフィルタを無効化する為に利用します。

なお、PUREクラスのfinalization出力ハンドラの登録以降に追加された出力バッファに限らず全ての出力バッファを破棄したい場合に$all引数にtrueを指定します。




Tags:

see:  PURE::defaultExceptionHandler()
access:  public


Parameters:

bool   $all   全ての出力バッファを破棄するか否か

[ Top ]

static method parsePackage [line 836]

static array parsePackage( string $packageName)

パッケージ名をパースします。

パッケージ名をパースして、妥当性検査の後にパス名部分とモジュール名部分に分割して返します。 返り値は配列になり、0要素がパス名、1要素がモジュール名になります。 パッケージ単位の指定を表す"*"がモジュール名に設定される可能性があることに注意してください。 パースが失敗、ないし妥当性検索に合致しなかった場合にはfalseを返します。




Tags:

return:  解析結果
access:  public


Parameters:

string   $packageName  

[ Top ]

static method status [line 345]

static int status( )

Ag:PUREのステータスの取得します。



Tags:

return:  Ag:PUREのステータス
access:  public


[ Top ]

static method testStatus [line 356]

static bool testStatus( int $flags)

Ag:PUREのステータスに指定のフラグが全て立っているか否かを判定します。



Tags:

return:  判定結果
access:  public


Parameters:

int   $flags   判定したいフラグ

[ Top ]


Class Constants

STATUS_EXECUTE_CLI =  16

[line 285]

PHPがCLIで実行中か否かを表す定数です。


[ Top ]

STATUS_EXECUTE_WINDOWS =  32

[line 287]

PHPがMicrosoft Windowsで実行中か否かを表す定数です。


[ Top ]

STATUS_IN_EXCEPT_HANDLER =  4

[line 280]

標準の例外処理ハンドラが実行中か否かを表す定数です。


[ Top ]

STATUS_IN_FINALIZATION =  2

[line 278]

終了処理が実行中か否かを表す定数です。


[ Top ]

STATUS_IN_INITILIZATION =  1

[line 276]

初期化処理が実行中か否かを表す定数です。


[ Top ]

STATUS_IN_OB_END_CLEAN_ALL =  8

[line 282]

ob_end_clean_allメソッドが実行中か否かを表す定数です。


[ Top ]



Documentation generated on Sun, 06 Jan 2008 01:33:12 +0900 by phpDocumentor 1.3.2