PSR対応 〜プログラム研究室〜



 ナビゲータのEVEです。
セキュリティ.jpg
中小企業診断士 の資料を整理するのに時間を取られ、ブログの更新まで手が回りませんでした。しかも、システム開発では、昨日終了予定だった PSR 対応にも影響が及び、つい先ほど完了し、これから、 クラス 開発に入れる状態です。ただ、ブログアップロード後は、同じく遅れている、 独習PHP の情報整理の方が先になると思います。
 そんなシステム開発ですが、本日時間が取られたPSR対応についてお話ししたいと思います。

[PSR-4]
 PSRについて以前御紹介しましたが、PSR-1からPSR-11まで分かれており、その中にPSR-4があるのですが、その対応に時間が取られました。PSRを要約すると以下の通りとなります。以下は、 ChatGPT の解説です。



■PSR-4の主な要点
?名前空間とディレクトリ構造


?ベースディレクトリ
 PSR-4では、オートローダーはベースディレクトリを指定する必要があります。このベースディレクトリは、名前空間のプレフィックスに関連付けられ、オートローダーはこのベースディレクトリを基準にしてクラスを探します。

?プレフィックス
 名前空間のプレフィックスは、特定のディレクトリにマッピングされる必要があります。たとえば、Acme\ という名前空間が src/ ディレクトリにマッピングされている場合、クラス Acme\Book は src/Book.php に位置します。

?ファイル名
 クラス名とファイル名は大文字と小文字を区別し、正確に一致させる必要があります。たとえば、Acme\Book というクラスは Book.php というファイルに保存されます。

?複数のベースディレクトリ
 一つのオートローダーで複数の名前空間プレフィックスを使用し、それぞれ異なるベースディレクトリを設定することも可能です。これにより、さまざまなライブラリやパッケージを容易に統合できます。


名前空間とは、使用することでクラスの名前の衝突を防ぎ、コードの組織化を図ることができます。 Apache のディレクトリ構造には依存せず、いろいろなプロジェクトがクラスを容易に管理できる仕組みです。では、このPSR-4の主題となるオートローダーについて解説をしましょう!

[オートローダーを使用したプログラム]
 説明する前にどんなモノなのか、ソースを見てみましょう!


<?php
/**
* Function Name : ?オートローダー
* Author : EVE
* Creation Date : 2024年11月1日
* Last Updated Date:
* Release Date :
* System Version :
* Overview : オートローダーの機能を提供する
*/

// オートローダー関数
function myAutoloader( $class ) {
// クラス名に基づいてファイルパスを決定
$file = $class . '.php';

//ファイルが存在するかどうか判定する
if (file_exists($file)) {
// ファイルを読み込む
require_once $file;
} else {
// ファイルが読み込めない場合
throw new Exception('File not found: ' . $file);
}
}

// ?オートローダーを登録
spl_autoload_register('myAutoloader');
?>


<?php
// オートローダーをインポート
?require_once 'myAutoloader.php';

/**
* Function Name : 配列クラス
* Author : EVE
* Creation Date : 2023年12月16日
* Last Updated Date:
* Release Date :
* System Version :
* Overview : 配列の基本的な操作を行う
*/

class ArrayClass ?extends ErrorMessageClass
{
public function __construct(array $arrayObject) // 編集対象配列
{







}

/**
* Function Name : 配列→文字列変換メソッド
* Parameters : sepa 種別
* Return Value
*┣ On Success : 編集後文字列
*┗ On Failure : false
* Author : EVE
* Creation Date : 2024年1月11日
* Last Updated Date:
* Release Date :
* Program Version :
* Overview : 配列から文字列に変換する
*/

public function meuImplode( stirng $sepa ):
false|string
{





}




/**
* Function Name : デストラクタ
* Parameters : なし
* Return Value
*┣ On Success : なし
*┗ On Failure : なし
* Author : EVE
* Creation Date : 2023年12月16日
* Last Updated Date:
* Release Date :
* Program Version :
* Overview : オブジェクトが消滅する場合の処理を定義する
*/

public function __destruct() :
void

{
//エラーメッセージクラスのデストラクタを実行する
?parent::__destruct(); //エラーデストラクタ





}
}
?>



以上を見ていただくと分かりますが、オートローダーと配列クラスの2つのプログラムが記述されています。

[?オートローダー]
 オートローダーは、上記のPSR-4の解説でご紹介したものです。各クラスの頭に定義し、 インスタンス 作成時に当該クラスを呼び出すために利用します。
 機能は、呼び出されたときに、使用するクラスを探し出し、探し出したクラス名は、$classの引数に設定されます。そして、設定された引数を使って、当該クラスをインポートします。
 なお、ここでは require_once を利用していますが、通常は Composer を使用するため、 require 、require_onceなどの記述は不要です。但し、Composerを利用しない場合は、ファイルが何度も読み込まれるリスクがあるため、require_onceを使用することが望ましいでしょう。
 EVEシステムでComposerを利用していませんが、その理由は、バージョンによって仕様が変わる可能性を考慮しているからです。過去の経験から、できるだけ外部ツールには依存しない方向で開発を行っています。

[?継承]
 このプログラムでは、エラーメッセージクラスを配列クラスが 継承 しています。エラーメッセージクラスが親で、配列クラスが子となります。
 よく継承の解説を読むと、親子の関係は「動物(親)>哺乳類(子)>犬(孫)」みたいな解説となっており、配列クラスの親がエラーメッセージクラスというのは違和感を感じます。そのため、最初エラーメッセージクラスの機能を各クラスに定義していたぐらいです。ただそれも製造していくうちにうざったくなり、外に出したのですが、その時でさえ、エラーメッセージクラスをインポートしようと考えていました。ただ、ChatGPTにこの問題を相談しているうちに、継承するという方法にたどりつきました。確かにできるのは分かるのですが、やはりピンときません。そういえば、 Java のプログラミングでエラーのクラスを継承していましたね・・・。今まで忘れていました。

[?デストラクタのオーバーロード]
 最後に親クラス、ここでは、エラーメッセージクラスのデストラクタを呼び出しています。 デストラクタ は、エラーメッセージクラス、配列クラス双方に定義されており、配列クラスをインスタンス化したときに、エラーメッセージクラスのデストラクタは、配列クラスのデストラクタに オーバーロード されます。そのため、ここではあえて、親クラス、エラーメッセージクラスのデストラクタを呼び出しています。

[あとがき]
 本日は、今日一番時間がかかった、オートローダーについてご紹介しました。この機能つい最近追加されたものかと思ったら、ver5.1の時には利用できたようです。ただ、沢山プログラムがある中、全てのプログラムを変更するのは難しそうです。ただ、オートローダーを作りさえすれば、修正箇所は、3箇所だけなので、知っていればできたかもしれません。やはり、新しいバージョンが出現するたびに、どんな機能ができたのか調べたほうがよさそうです。

 では、また!!!
検索
<< 2024年11月 >>
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
最新記事
タグクラウド
カテゴリーアーカイブ
ファン
最新コメント
プロフィール
ゼロから始めるシステム開発さんの画像
ゼロから始めるシステム開発
 こんにちは!ナビゲータのEVEです。各種研究室を用意し、次期EVEシステムを製造しようと日々頑張っています。現在一番力を入れているのが、資金調達です。このブログもその一環ですので、ご協力いただければ嬉しいです。

2024年11月01日

この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/12765776
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: