PHPのフレームワークです。オートローディング、ルーティング、ORマッパ、フォームバリデータ、その他ユーティリティがセットになっています。
修订版 | 159 (tree) |
---|---|
时间 | 2022-03-23 13:11:27 |
作者 | tantancode |
PHP8.1対応
@@ -364,7 +364,7 @@ | ||
364 | 364 | // if(isset($_SERVER['HTTP_AUTHORIZATION']) && 追加の条件) { |
365 | 365 | // |
366 | 366 | // // X_FORWARDED_FOR は複数のノードを経由した場合 "," で区切られて複数書かれている場合がある。 |
367 | - // return trim(explode(',', $_SERVER["HTTP_X_FORWARDED_FOR"])[0]); | |
367 | + // return trim(explode(',', $_SERVER["HTTP_X_FORWARDED_FOR"] ?? '')[0]); | |
368 | 368 | // } |
369 | 369 | |
370 | 370 | // コマンドラインで実行しているなど、セットされていない場合がある。 |
@@ -195,7 +195,7 @@ | ||
195 | 195 | public static function parseString($formEncoded) { |
196 | 196 | |
197 | 197 | // 引数がカラなら戻り値もカラ。 |
198 | - if(0 == strlen($formEncoded)) | |
198 | + if(0 == strlen($formEncoded ?? '')) | |
199 | 199 | return array(); |
200 | 200 | |
201 | 201 | // 戻り値初期化。 |
@@ -37,10 +37,10 @@ | ||
37 | 37 | |
38 | 38 | fwrite($fp, "{$key}:\n"); |
39 | 39 | foreach($value as $v) |
40 | - fprintf($fp, " %s\n", str_replace("\n", "\\n", $v)); | |
40 | + fprintf($fp, " %s\n", str_replace("\n", "\\n", $v ?? '')); | |
41 | 41 | |
42 | 42 | }else { |
43 | - fprintf($fp, "%s: %s\n", $key, str_replace("\n", "\\n", $value)); | |
43 | + fprintf($fp, "%s: %s\n", $key, str_replace("\n", "\\n", $value ?? '')); | |
44 | 44 | } |
45 | 45 | |
46 | 46 | fwrite($fp, "\n"); |
@@ -28,7 +28,7 @@ | ||
28 | 28 | private function findView() { |
29 | 29 | |
30 | 30 | // アクション名をグループ名とモーション名に分割。 |
31 | - @list($group, $motion) = explode('.', $this->attributes['take.action']); | |
31 | + @[$group, $motion] = explode('.', $this->attributes['take.action']); | |
32 | 32 | |
33 | 33 | // 分割できたなら... |
34 | 34 | if($motion) { |
@@ -528,7 +528,7 @@ | ||
528 | 528 | file_put_contents($temp, $item['value']); |
529 | 529 | |
530 | 530 | // 標準関数 mime_content_type() でファイル種別を取得。画像でない場合はエラー。 |
531 | - $mime = explode('/', mime_content_type($temp)); | |
531 | + $mime = explode('/', @mime_content_type($temp) ?: ''); | |
532 | 532 | if($mime[0] != 'image') return 'image'; |
533 | 533 | |
534 | 534 | // 標準関数 getimagesize() でキャンバスサイズを取得。 |
@@ -148,7 +148,7 @@ | ||
148 | 148 | |
149 | 149 | // 各値をExcel風にエスケープして... |
150 | 150 | array_walk($content, function(&$value){ |
151 | - $value = '"' . str_replace('"', '""', $value) . '"'; | |
151 | + $value = '"' . str_replace('"', '""', $value ?? '') . '"'; | |
152 | 152 | }); |
153 | 153 | |
154 | 154 | // タブ文字で区切って出来上がり。 |
@@ -273,7 +273,7 @@ | ||
273 | 273 | $mode = 'all.html'; |
274 | 274 | |
275 | 275 | // 種別とフォーマットを取得。 |
276 | - @list($type, $format) = explode('.', $mode); | |
276 | + @[$type, $format] = explode('.', $mode ?? ''); | |
277 | 277 | |
278 | 278 | // フォーマットのデフォルトはHTMLとする。 |
279 | 279 | if(!$format) |
@@ -160,7 +160,7 @@ | ||
160 | 160 | */ |
161 | 161 | public static function forward($name, $attributes = array()) { |
162 | 162 | |
163 | - list($site, $action) = explode('/', $name); | |
163 | + [$site, $action] = explode('/', $name); | |
164 | 164 | |
165 | 165 | // アクションをロード。 |
166 | 166 | $action = static::createAction($site, $action, $attributes); |
@@ -279,7 +279,7 @@ | ||
279 | 279 | } |
280 | 280 | |
281 | 281 | // アクション指定を "/" で区切って... |
282 | - $compartments = explode('/', $name); | |
282 | + $compartments = explode('/', $name ?? ''); | |
283 | 283 | |
284 | 284 | // コントローラ部分、サイト部分、アクション部分を取得する。具体的には "/" で区切られた後ろ2つとそれより前の部分、計3つで分ける。 |
285 | 285 | while(4 <= count($compartments)) { |
@@ -471,9 +471,9 @@ | ||
471 | 471 | |
472 | 472 | // 以降、autoload キーの設定がない場合は... |
473 | 473 | |
474 | - // 名前空間付きの場合は最後のクラス名だけを参照する。 | |
475 | - $dummy = explode('\\', $name); | |
476 | - $name = end($dummy); | |
474 | + // 名前空間付きのオートロードはサポートしていない。たぶんComposerでインストールしたクラスと思われる。 | |
475 | + if(strpos($name, '\\') !== false) | |
476 | + return; | |
477 | 477 | |
478 | 478 | // まずはクラス名で記載ファイルを探索。 |
479 | 479 | $path = static::searchClassFile($name); |
@@ -669,7 +669,7 @@ | ||
669 | 669 | $document = $argv[0]; |
670 | 670 | |
671 | 671 | // コマンドライン第一引数を PATH_INFO とするが、クエリストリングが付いている可能性があるので分離しておく。 |
672 | - @[$_SERVER['PATH_INFO'], $query] = explode('?', @$argv[1]); | |
672 | + @[$_SERVER['PATH_INFO'], $query] = explode('?', $argv[1] ?? ''); | |
673 | 673 | |
674 | 674 | // "/" で始まっていなかったら補う。 |
675 | 675 | if(strlen($_SERVER['PATH_INFO']) > 0 && $_SERVER['PATH_INFO'][0] != '/') |
@@ -971,7 +971,7 @@ | ||
971 | 971 | protected static function searchAction($site, $action) { |
972 | 972 | |
973 | 973 | // アクション名を "." で分ける。 |
974 | - @list($group, $action) = explode('.', $action); | |
974 | + @[$group, $action] = explode('.', $action); | |
975 | 975 | |
976 | 976 | // "." があるなら $group/$action か default/$group$action のどちらか。 |
977 | 977 | if($action) |
@@ -187,6 +187,8 @@ | ||
187 | 187 | // PHP標準 number_format と同じだが、floatの有効桁数(14桁くらい)を超える長大な桁数を扱う。 |
188 | 188 | function bc_format($value, $decimals) { |
189 | 189 | |
190 | + if(is_null($value)) return $value; | |
191 | + | |
190 | 192 | // 整数部と小数部に分ける。 |
191 | 193 | @[$int, $dec] = explode('.', $value); |
192 | 194 |
@@ -451,7 +453,7 @@ | ||
451 | 453 | if($arg == '.' || $arg == '..') |
452 | 454 | $arg = '_'; |
453 | 455 | else |
454 | - $arg = str_replace('/', '', $arg); | |
456 | + $arg = str_replace('/', '', $arg ?? ''); | |
455 | 457 | |
456 | 458 | if(strlen($arg) > 256) |
457 | 459 | $arg = mb_strcut($arg, 0, 256); |
@@ -11,7 +11,7 @@ | ||
11 | 11 | function smarty_function_partial($params, $template) { |
12 | 12 | |
13 | 13 | // パラメータから "action" キーを取り出して、サイト名とアクション名に分ける。 |
14 | - @list($site, $action) = explode('/', ArrayUtil::eject($params, 'action')); | |
14 | + @[$site, $action] = explode('/', ArrayUtil::eject($params, 'action')); | |
15 | 15 | |
16 | 16 | // "/" がないのはサイト名の省略。 |
17 | 17 | if( is_null($action) ) { |