高品質な PHP コードの書き方
トラを恐れない生まれたばかりの子牛のために書かれているので、自由に読んでください。この章は PHP Laravel に基づいています
はじめに
人々はよく尋ねます
- ディレクトリをより適切に設計するにはどうすればよいですか?
- コードを適切に配布するにはどうすればよいでしょうか?
- 保守可能なプロジェクトの書き方?
私は「悪い」プロジェクトについても書いています。以下は、記事の要約と主要なインターネット専門家の個人的な開発経験に基づいています。
Controller

Controller は、その名前が示すように、コントローラーです。PHP を使い始めると、Controller が次のことを表すことがわかります。 MVC の C 層です。MVC 自体の概念は、ビジネスを分離する方法を教えるコード分離です。しかし、ビジネスが発展し続けるにつれて、コードの複雑さも増し、機能間のつながりも複雑になります。最終的に、MVC は次の図のようになります。MVC の設計アイデアだけに依存すると、成長するビジネスをサポートできなくなります。
ここで、コントローラーのタスクと機能を再定義します。コントローラーは、SOLID 単一関数原則に準拠する Http Reqeust リクエストのみを制御します。

ビジネス コードをコントローラーに直接記述すると、コードが非常に肥大化し、保守や拡張が困難になります。
<?php namespace App\Http\Controller; class UserController extends Controller{ public function register(Request $request){ $user = new User(); $user->username = $request->input('username'); $user->password = $request->input('password'); $result = $user->save(); return $result; } }复制代码
この時点で、ビジネス コードをどのように分離するかを検討する必要があります。サービスの概念
Service
サービス自体はサービスとして翻訳されます
- 外部メソッドとパブリック メソッドをサービスに挿入します
- サービスをコントローラーに挿入します

上の図のように
UserController
<?php namespace App\Http\Controller; class UserController extends Controller{ public $request; protected $userService; public function __construct(Request $request, UserService $userService) { $this->request = $request; $this->userService = $userService; } public function register() { //... validation return $this->userService->register ($this->request->all()); } }复制代码
UserService
<?php namespace App\Service; class UserService{ public function register($data) { $username = $data['username']; $password = $data['password']; $password = encrypt ($password); $user = new User(); $user->username = $username; $user->password = $password; $result = $user->save(); return $result; } }复制代码
これまで、私たちは少なくともビジネスとリクエストを完全に分離してきました。しかし、それでも不十分で、ビジネスや CURD をすべて Service で書いてしまうと、肥大化した Controller を Service に移すだけになり、Service の存在意味がなくなってしまいます。 したがって、サービスを分割し、データベースの R 操作を分離し続ける必要があります。CUD の操作は基本的に同じですが、R 操作はビジネスの複雑さに応じてより多彩になるためです。したがって、スタンドアロンの R 操作。この時点では、リポジトリの概念について言及します。
リポジトリ
リポジトリ補助モデルを使用して、関連するクエリ ロジックをさまざまなリポジトリにカプセル化し、ロジック コードのメンテナンスを容易にします
- SOLID # の単一原則に準拠します。 ##SOLID 準拠の依存関係の反転

<?php namespace App\Http\Controller; class UserController extends Controller{ public $request; protected $userService; public function __construct(Request $request, UserService $userService) { $this->request = $request; $this->userService = $userService; } public function getUserInfo() { //... validation return $this->userService->getUserInfo ($this->request->all()); } }复制代码
<?php namespace App\Service;
class UserService{
public $userRepository;
public function __construct(UserRepository $userRepository){ $this->userRepository = $userRepository;
}
public function getUserInfo()
{ return $this->userRepository->getUserInfo($data);
}
}复制代码
ログイン後にコピー
UserRepository <?php namespace App\Service; class UserService{ public $userRepository; public function __construct(UserRepository $userRepository){ $this->userRepository = $userRepository; } public function getUserInfo() { return $this->userRepository->getUserInfo($data); } }复制代码
<?php namespace App\Repository;
class UserRepository{
public function getUserInfo($data)
{ $userId = $data['user_id']; $result = User::where('id',$userId)->first();
return $result;
}
}复制代码
ログイン後にコピーログイン後にコピー
R の問題を解決した後、CUD は比較的統一されていてシンプルなので、R をまとめることができるのではないかと誰かが尋ねました。答えは「いいえ」です。新しい名詞「アクション」を引用します。 アクション
<?php namespace App\Repository; class UserRepository{ public function getUserInfo($data) { $userId = $data['user_id']; $result = User::where('id',$userId)->first(); return $result; } }复制代码
これは @Charlie_Jade の記事を読んだ後に学んだことです
CreateUser、DeleteUser、UpdateUser などの各操作ファイルに依存しない
SOLID の単一原則に準拠

<?php namespace App\Http\Controller; class UserController extends Controller{ public $request; protected $userService; public function __construct(Request $request, UserService $userService) { $this->request = $request; $this->userService = $userService; } public function register(){ //... validation return $this->userService->register($this->request->all()); } public function getUserInfo() { return $this->userService->getUserInfo ($this->request->all()); } }复制代码
<?php namespace App\Service; class UserService{ public function getUserInfo(UserRepository $userRepository) { return $this->userRepository->getUserInfo($data); } public function register(){ $result = (new CreateUser())->execute($this->request->all()); return $result; } }复制代码
<?php namespace App\Repository;
class UserRepository{
public function getUserInfo($data)
{ $userId = $data['user_id']; $result = User::where('id',$userId)->first();
return $result;
}
}复制代码
ログイン後にコピーログイン後にコピー
CreateUser<?php namespace App\Repository; class UserRepository{ public function getUserInfo($data) { $userId = $data['user_id']; $result = User::where('id',$userId)->first(); return $result; } }复制代码
<?php namespace App\Action;
use App\Model\Member;
class CreateUser extends CreateUserWallet
{
public function execute(array $data)
{ $models = new Member(); $models->tel = $data['tel']; $models->password = $data['password']; $result = $models->save ();
return $result;
}
}复制代码
ログイン後にコピー
上記のコード ロジックを次の図に示します
<?php namespace App\Action; use App\Model\Member; class CreateUser extends CreateUserWallet { public function execute(array $data) { $models = new Member(); $models->tel = $data['tel']; $models->password = $data['password']; $result = $models->save (); return $result; } }复制代码

Common
は public と訳され、一般的に使用されます。開発によっては、いくつかのパブリック メソッドが必要になる場合があります (電子メール送信などの非パブリック クラスは、使用するのが適切ではありません)。ユーザー残高のクエリ、ユーザーが登録されているかオンラインであるかどうかのクエリ、注文番号の生成など。 Common を使用するのはさらに簡単です。これはパブリック関数ライブラリに似ています。

Event
イベントを気にしない場合は、これを使用することを選択できます。実行結果だけでなく、イベント キューのリッスンも提供されます。
例外
すべてのエラー メッセージを返すために Return を使用しないでください。多くの場合、あなたの戻り値はあなたの戻り値ではない可能性があります
ありがとうございます
皆さんありがとうございます。この記事を読んだ後、新しいアイデアがあれば、コメント欄でお気軽に議論してください。
推奨チュートリアル: "php チュートリアル "
以上が高品質な PHP コードの書き方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
