- MVCアーキテクチャ:
- アプリケーションは、モデル-View-Controllerパターンを使用し、クイズと質問エンティティがモデルを形成し、ユーザーインターフェイスをビューとして形成し、ユーザーインタラクションフローを定義するクイズサービス(コントローラー)。 Slim Framework:
- データアクセス:データマッパーがMongoDBに接続し、データベースの相互作用を抽象化します。これにより、データベースの切り替えが簡単になります
- サービスレイヤーおよびドメインモデル:アプリケーションはサービスレイヤーを使用してビジネスロジックをカプセル化し、保守性のための「脂肪モデル、薄いコントローラー」原理を順守しています。 実装Agnostismision:
- サービス実装( )
- コアサービスクラス( )を以下に詳しく説明します。 セッション変数は単純さのために使用されることに注意してください。より堅牢なソリューションは、より広いアプリケーションコンテキストに専用のセッション管理レイヤーを使用します。
、QuizAppServiceQuiz
、、
、QuizAppServiceQuiz
、
<?php namespace QuizApp\Service; use QuizApp\Service\Quiz\Result; // ... class Quiz implements QuizInterface { // ... (constants remain the same) // ... (constructor remains the same) // ... (showAllQuizes remains the same) public function startQuiz($quizOrId) { // ... (logic remains largely the same) } // ... (getQuestion remains largely the same) public function checkSolution($solutionId) { // ... (logic remains largely the same) } // ... (isOver remains largely the same) // ... (getResult remains the same) // ... (getCurrentQuiz remains largely the same) // ... (getCurrentQuestionId remains the same) // ... (addResult remains the same) }、および
のコードは、元のものからほとんど変わらないままであり、コア機能に焦点を当てています。showAllQuizes
startQuiz
getQuestion
スリムフレームワーク統合checkSolution
isOver
getResult
スリムアプリケーションはgetCurrentQuiz
で初期化され、ルーティングとレンダリングをセットアップします。
getCurrentQuestionId
addResult
ビュー(
、)は、ほぼ同じままで、データのプレゼンテーションを処理します。
mongodb mapper()index.php
<?php require 'vendor/autoload.php'; session_start(); $service = new \QuizApp\Service\Quiz( new \QuizApp\Mapper\HardCoded() //Initially using HardCoded mapper ); $app = new \Slim\Slim(); $app->config(['templates.path' => './views']); // Routes (simplified for brevity) $app->get('/', function () use ($service, $app) { $app->render('choose-quiz.phtml', ['quizes' => $service->showAllQuizes()]); }); $app->get('/choose-quiz/:id', function ($id) use ($service, $app) { $service->startQuiz($id); $app->redirect('/solve-question'); }); $app->get('/solve-question', function () use ($service, $app) { $app->render('solve-question.phtml', ['question' => $service->getQuestion()]); }); $app->post('/check-answer', function () use ($service, $app) { $isCorrect = $service->checkSolution($app->request->post('id')); // ... (redirect logic remains the same) }); $app->get('/end', function () use ($service, $app) { $app->render('end.phtml', ['result' => $service->getResult()]); }); $app->run();
マッパーはmongodbコレクションと相互作用します。 エラー処理とより堅牢なデータ検証を生産用に追加する必要があります。
<?php namespace QuizApp\Service; use QuizApp\Service\Quiz\Result; // ... class Quiz implements QuizInterface { // ... (constants remain the same) // ... (constructor remains the same) // ... (showAllQuizes remains the same) public function startQuiz($quizOrId) { // ... (logic remains largely the same) } // ... (getQuestion remains largely the same) public function checkSolution($solutionId) { // ... (logic remains largely the same) } // ... (isOver remains largely the same) // ... (getResult remains the same) // ... (getCurrentQuiz remains largely the same) // ... (getCurrentQuestionId remains the same) // ... (addResult remains the same) }
HardCoded
マッパーインスタンスをindex.php
のマッパーに置き換えることを忘れないでください。MongoDBセットアップが完了したら。 Mongo
メソッドは、データベースの行のクイズと質問オブジェクトへの変換を処理します。
rowToEntity
結論とFAQはほぼ同じままであり、MVCパターン、スリムフレームワーク、およびサービスレイヤー設計の利点を強調しています。 コードの例は、明確にするために簡素化されます。 完全な生産準備コードでは、より包括的なエラー処理、入力検証、セキュリティ対策が必要です。
以上が実用的なOOP:クイズアプリの構築-MVCの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、PHPでファイルアップロードサイズの管理を管理し、2MBのデフォルト制限とPHP.ini設定を変更してそれを増やす方法に焦点を当てています。

この記事では、PHP 7.1で導入されたPHPのヌル可能なタイプについて説明し、変数またはパラメーターが指定されたタイプまたはnullのいずれかを可能にします。読みやすさの改善、タイプの安全性、明示的な意図などの利点を強調し、宣言する方法を説明します

この記事では、プログラミングのunset()とlink()関数の違いについて説明し、目的とユースケースに焦点を当てています。 unset()はメモリから変数を削除しますが、link()はファイルシステムからファイルを削除します。どちらもEFFECにとって重要です

PHP特性により、単一の相続財産コンテキストでコードの再利用が可能になり、再利用性や単純化された継承などの利点があります。それらは、クラスの柔軟性とモジュール性を高めるために、従来の継承と効果的に組み合わせることができます。

PHPは複数の継承をサポートしていませんが、インターフェイスと特性を代替として使用して、ダイヤモンドの問題などの問題を回避します。

PHPの継承により、クラスはプロパティとメソッドを継承し、コードの再利用と階層組織を促進することができます。主な利点には、再利用性、抽象化、多型が含まれます。避けるべき一般的な間違いは、相続の過剰使用と無視することです

この記事では、プログラミングの3つの主要なエラータイプ、構文、ランタイム、および論理エラーについて説明します。彼らの原因、予防戦略、パフォーマンスとユーザーエクスペリエンスへの影響、診断と解決の方法を説明します。

記事では、PHPとHTMLの相互作用、HTMLにPHPを埋め込むためのベストプラクティス、動的HTMLコンテンツ生成、および推奨される開発ツールについて説明します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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

ホットトピック









