1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406:
<?php
// このファイルの名前空間の定義
namespace SKJ;
// 別名定義
use Exception;
use IteratorAggregate;
/**
* AppException インターフェース
*
* @package SKJ\AppException
* @author y3high <y3public@49364.net>
* @copyright 2019 Seikouhou.
* @license https://opensource.org/licenses/MIT MIT
* @since Class available since Release 0.8.0
*/
interface AppExceptionInterface extends IteratorAggregate
{
/**
* このオブジェクトをイテレータとして扱った時に返す連結された例外のソート(発生順)定数
*
* @api
*/
const SORT_ORDER_ASC = 0, SORT_ORDER_DESC = 1;
/**
* 例外メッセージを取得する
*
* ※\Exceptionから継承
*
* @api
* @return string 例外メッセージ文字列
*/
public function getMessage();
/**
* 前の例外を返す
*
* ※\Exceptionから継承
*
* @api
* @return self 前に発生したApp例外、もしくはNULL
*/
public function getPrevious();
/**
* 例外コードを取得する
*
* ※\Exceptionから継承
*
* @api
* @return int 例外コード
*/
public function getCode();
/**
* 例外が作られたファイルを取得する
*
* ※\Exceptionから継承
*
* @api
* @return string 例外が作られたファイルの名前
*/
public function getFile();
/**
* 例外が作られた行を取得する
*
* ※\Exceptionから継承
*
* @api
* @return int 例外が作られた行番号
*/
public function getLine();
/**
* スタックトレースを取得する
*
* ※\Exceptionから継承
*
* @api
* @return array 例外のスタックトレース
*/
public function getTrace();
/**
* スタックトレースを文字列で取得する
*
* ※\Exceptionから継承
*
* @api
* @return string 例外のスタックトレースの文字列表現
*/
public function getTraceAsString();
/**
* 例外生成時のグローバルスコープの変数情報を取得
*
* @api
* @return array グローバル変数情報
*/
public function getGlobalVars();
/**
* 例外生成時のローカルスコープの変数情報を取得
*
* @api
* @return array ローカル変数情報
*/
public function getCallerVars();
/**
* 基底例外コードを取得
*
* ファイルごとにユニークになる、そのファイル中で例外コードの基底とすべき数値を返す
*
* @api
* @param string $fileName ファイルの絶対パス
* @return int|null 基底例外コード、もう発行できない場合はnull
*/
public static function getBaseExceptionCode($fileName);
/**
* AppExceptionがエクステンションを読み込んでいるかどうか調べる
*
* エクステンションを読み込んでいれば、インスタンス生成時のローカルスコープの変数情報を取得する事ができる
*
* @api
* @return bool エクステンションを読み込んでいれば真、そうでなければ偽
*/
public static function isExtension();
/**
* 現在の例外クラス名を取得
*
* @api
* @return string クラス名
*/
public function getClass();
/**
* 例外生成時の例外メソッド名を取得
*
* ※これは当然コンストラクタになる(getFile()、getLine()などに合わせて存在)
*
* @api
* @return string 関数(メソッド)名
*/
public function getFunction();
/**
* 現在のコールキュー情報を取得する
*
* @api
* @return array コールキュー情報
*/
public function getCallQueue();
/**
* 例外生成場所を変更
*
* 例外生成場所をこのメソッドが呼ばれた場所に擬似的に変更する
*
* 引数に他のApp例外のコールキュー情報を渡せば、そのApp例外の発生場所と同じにできる
*
* @api
* @param array|null $callQueue self::getCallQueue()で得られるコールキュー情報
* @return self 自分自身を返す
*/
public function forge(array $callQueue = null);
/**
* この例外の生成場所が現在のコンテキストに含まれるか調べる
*
* ここで意味するコンテキストは当メソッドをコールした箇所の変数のスコープとほぼ同じ範囲だが、include、reuqire、include_once、require_onceでの飛び先は含まないので注意
*
* @api
* @param array|null $debugBackTrace 例外生成時のコールキュー情報と比較する為のコールスタック情報、通常は指定してはいけない
* @return bool 含まれているのなら真、そうでないのなら偽
*/
public function wasCreatedInCurrentContext(array $debugBackTrace = null);
/**
* 同一ファイルでの例外発生行を取得
*
* 現在の(このメソッドを呼び出した)コンテキストから見て、どの行で発生した例外か調べる
*
* @api
* @return int|bool 例外発生行、もしくは取得失敗時に偽
*/
public function getLineInCurrentContext();
/**
* 同一ファイルでの例外発生関数名を取得
*
* 現在の(このメソッドを呼び出した)コンテキストから見て、どの関数、メソッド呼び出しで発生した例外か調べる
*
* @api
* @return string|bool 例外発生関数名、もしくは取得失敗時に偽
*/
public function getFunctionInCurrentContext();
/**
* 同一ファイルでの例外発生関数の引数を取得
*
* 現在の(このメソッドを呼び出した)コンテキストから見て、この例外が発生した関数、メソッドの引数を取得する
*
* @api
* @return array|bool 例外発生関数の引数、もしくは取得失敗時に偽
*/
public function getFuncArgsInCurrentContext();
/**
* 例外の発生源を識別する情報を設定
*
* 例外の発生源を識別する情報(バリデーションエラーならばカラム名など)を設定する機能だが、特に必要なければ使用しなくとも良い
*
* @api
* @param string|array $fields,... 例外の発生源(複数なら配列や引数を増やす)を識別する情報
* @return self 自分自身を返す
*/
public function setFields(...$fields);
/**
* 例外の発生源を識別する情報を取得
*
* 例外の発生源を識別する情報(バリデーションエラーならばカラム名など)を取得する機能だが、特に必要なければ使用しなくとも良い
*
* @api
* @return array 例外の発生源を識別する情報が格納された配列
*/
public function getFields();
/**
* 例外メッセージを設定
*
* @api
* @param string $message 例外メッセージ
* @return self 自分自身を返す
*/
public function setMessage($message);
/**
* 例外コードを設定
*
* int型以外が渡されると既定の例外コードが設定される
*
* @api
* @param int $code 例外コード
* @return self 自分自身を返す
*/
public function setCode($code);
/**
* 例外が発生したファイルを設定
*
* @api
* @param string $file 例外が発生したファイル
* @return self 自分自身を返す
*/
public function setFile($file);
/**
* 例外が発生した行を設定
*
* @api
* @param int $line 例外が発生した行
* @return self 自分自身を返す
*/
public function setLine($line);
/**
* 状態コードを設定
*
* 例外コードとは別に補助的に使用できるコードとして自由に利用して下さい
*
* @api
* @param mixed $statusCode 状態コード
* @return self 自分自身を返す
*/
public function setStatusCode($statusCode);
/**
* 状態コードを取得
*
* 例外コードとは別に補助的に使用できるコードとして自由に利用して下さい
*
* @api
* @return mixed 状態コード
*/
public function getStatusCode();
/**
* AppExceptionに強制変換する前の例外を保存する
*
* @internal
* @param \Exception $exception 強制変換される前の例外
* @return self 自分自身を返す
*/
public function setOriginalException(Exception $exception);
/**
* AppExceptionに強制変換される前の例外を取得する
*
* @api
* @return \Exception|null 強制変換される前の例外、未設定ならnull
*/
public function getOriginalException();
/**
* AppExceptionに強制変換される前の例外クラス名を取得する
*
* @api
* @return string|null 強制変換される前の例外クラス名、未設定ならnull
*/
public function getOriginalClassName();
/**
* イテレータとして動作時に\SKJ\AppException\Logic\ContainerExceptionをスキップする
*
* @api
* @return self 自分自身を返す
*/
public function enableSkipContainer();
/**
* イテレータとして動作時に\SKJ\AppException\Logic\ContainerExceptionをスキップしない
*
* @api
* @return self 自分自身を返す
*/
public function disableSkipContainer();
/**
* イテレータとして扱った時の並び順(発生順)を制御
*
* @api
* @param int $order 並び順
* @return self 自分自身を返す
* @uses self::SORT_ORDER_ASC 昇順でソート時に<var>$order</var>に指定
* @uses self::SORT_ORDER_DESC 降順でソート時に<var>$order</var>に指定
*/
public function setSortOrder($order = self::SORT_ORDER_DESC);
/**
* イテレータとして扱った時に抽出するクラス設定を初期化
*
* @api
* @return self 自分自身を返す
*/
public function resetFilter();
/**
* イテレータとして扱った時に抽出するクラスを設定
*
* @api
* @param string|null $className 抽出対象となるクラス名、null時は現インスタンスと同一のクラスのみ対象とする
* @return self 自分自身を返す
*/
public function setFilter($className = null);
/**
* 外部イテレータを返す
*
* @internal
* @return \Traversable 外部イテレータ
*/
public function getIterator();
/**
* 連結された例外のリストをログとして返す
*
* ログフォーマットは"[クラス名] -> ファイル名(発生行) [例外コード]例外メッセージ\n 文字列化されたスタックトレース"となる
*
* @api
* @return array ログメッセージが格納された配列
*/
public function getExceptionLog();
/**
* 例外再構築処理
*
* 現在の例外が第1引数に指定された条件(例外コード)に当てはまるのならば、現在の例外を基に新規例外を作成する
*
* なお、新規例外には現在の例外を連結して返す
*
* 第1引数仕様 - 例外再構成情報配列
*
* <code>
* [
* (int)対象の例外コード => [
* (int|null)設定する例外コード(null指定時は元の値から変更しない),
* (string|null)新規作成するAppException系例外クラス名(null指定時は元のクラスから変更しない),
* (string|null)設定する例外メッセージ(null指定時は元の値から変更しない)
* ] | (int)設定する例外コード | (\SKJ\AppExceptionInterface)置き換えるAppException系例外,...
* ]
* </code>
*
* @api
* @param array $replacement 例外再構成情報配列
* @return self|\SKJ\AppExceptionInterface|\SKJ\AppException\Logic\ContainerException <var>$replacement</var>に該当する例外コードのキーがあれば、そのエントリで指定されたAppException系例外、もし該当する例外コードが無い場合は、renew()の呼び出し元と同一コンテキストで生成された例外であれば自分自身をそのまま返し、そうでなければ\SKJ\AppException\Logic\ContainerExceptionクラスのインスタンスを返す
*/
public function renew(array $replacement);
}