ホームページ > 記事 > PHPフレームワーク > 2018PHP 面接の質問: ThinkPHP
1. 一般的な PHP フレームワーク
答え: thinkPHP、yii、ZendFramework、CakePhp、sy
関連トピックの推奨事項: 2020 thinkphp インタビューの質問と回答 (完全なコレクション)
2. TP の単一エントリ ファイルを理解するにはどうすればよいですか?
回答: ThinkPHP は、プロジェクトのデプロイメントとアクセスに単一エントリー・モードを使用します。どの機能が完了しても、プロジェクトには統一された (ただし、唯一であるとは限りません) エントリーがあります。すべてのプロジェクトはエントリ ファイルから始まり、すべてのプロジェクトのエントリ ファイルは類似していると言えます。エントリ ファイルには主に次のものが含まれます:
フレームワーク パス、プロジェクト パス、およびプロジェクト名を定義します (オプション)
デバッグ モードと実行モードに関連する定数を定義します (オプション)
フレームワーク エントリ ファイルをロードします (必須)
3. ThinkPHP の MVC 階層化とは何ですか? (理解)
回答: MVC は、アプリケーションの論理層とプレゼンテーション層を分離する方法です。 ThinkPHP も MVC 設計パターンに基づいています。 MVC は単なる抽象的な概念であり、特に明確な規定はありませんが、ThinkPHP における MVC の階層化は次のように大まかに反映されています:
モデル (M): モデルの定義は Model クラスによって完了します。
コントローラー (C): アプリケーション コントローラー (コア コントローラー App クラス) とアクション コントローラーの両方がコントローラーの役割を担い、アクション コントローラーはビジネス プロセスの制御を完了し、アプリケーション コントローラーはスケジュール制御を担当します。
View (V): Viewクラスとテンプレートファイルで構成されており、テンプレートは100%分離されており、単独でプレビュー、作成することができます。
しかし、実際には、ThinkPHP は M や V に依存していないため、モデルやビューがなくても動作します。 C にも依存しません。これは、ThinkPHP には、Action の上にマスター コントローラー、つまりアプリケーション全体のスケジューリングを担当する App コントローラーがあるためです。 C が存在しない場合、ビュー V が存在する必要があります。存在しない場合、ビュー V は完全なアプリケーションではなくなります。
つまり、ThinkPHP の MVC モデルは、MVC 自体に固執するのではなく、アジャイル開発の手段を提供するだけです。
4. SQL を最適化するにはどうすればよいですか? (学生は次の説明を理解でき、その後は自分の理解に従って一般的な意味を述べるだけで済みます)
答え: (1) 正しいストレージ エンジンを選択してください
MySQL をたとえば、MyISAM と InnoDB という 2 つのストレージ エンジンが含まれていますが、各エンジンには長所と短所があります。
MyISAM は、多数のクエリを必要とするアプリケーションには適していますが、多数の書き込み操作にはあまり適していません。フィールドを更新するだけの場合でも、テーブル全体がロックされ、読み取り操作が完了するまで他のプロセス (読み取りプロセスであっても) が動作できなくなります。さらに、MyISAM は SELECT COUNT(*) などの計算が非常に高速です。
InnoDB の傾向は非常に複雑なストレージ エンジンになるため、一部の小規模なアプリケーションでは MyISAM よりも遅くなるでしょう。ただし、「行ロック」をサポートしているため、書き込み操作が多い場合はより優れています。さらに、トランザクションなどのより高度なアプリケーションもサポートします。
(2) フィールドのデータ型を最適化する
列が小さいほど高速になるという原則を覚えておいてください。テーブルに数列しかない場合 (ディクショナリ テーブル、構成テーブルなど)、主キーとして INT を使用する理由はなく、MEDIUMINT、SMALLINT、またはより小さい TINYINT を使用する方が経済的です。時間を追跡する必要がない場合は、DATETIME よりも DATE を使用する方がはるかに優れています。もちろん、拡張のための十分な余地も残しておく必要があります。
(3) 検索フィールドのインデックスを追加する
インデックスは、必ずしも主キーや唯一のフィールドを意味するわけではありません。テーブル内に常に検索に使用するフィールドがある場合は、そのフィールドにインデックスを作成することをお勧めします。検索するフィールドが大きなテキスト フィールドでない場合は、フルテキスト インデックスを作成する必要があります。
(4) Select * の使用は避けてください。データベースから読み取られるデータが増えるほど、クエリが遅くなります。また、データベースサーバーとWEBサーバーが独立した2台のサーバーの場合、ネットワーク通信の負荷も大きくなります。データ テーブル内のすべてのフィールドをクエリする場合でも、* ワイルドカード文字は使用しないでください。組み込みのフィールド除外定義をうまく活用すると、より便利になる場合があります。
(5) VARCHAR の代わりに ENUM を使用します
ENUM タイプは非常に高速かつコンパクトです。実際には、TINYINT を保持しますが、文字列として表示されます。このようにして、このフィールドを使用して選択リストを作成するのが非常に完璧になります。たとえば、性別、民族、部門、ステータスなどのフィールドの値が限定されており、固定されている場合は、VARCHAR ではなく ENUM を使用する必要があります。
(6) 可能な限り NOT NULL を使用する
NULL 値を使用する特別な理由がない限り、フィールドは常に NOT NULL にしてください。 NULL は実際には余分なスペースを必要とするため、比較を実行するとプログラムがより複雑になります。もちろん、これは NULL を使用できないという意味ではなく、実際は非常に複雑であり、NULL 値を使用する必要がある状況が依然として存在します。
(7) 固定長テーブルのほうが高速になります
テーブル内のすべてのフィールドが「固定長」の場合、テーブル全体が「静的」または「固定長」とみなされます。 」。たとえば、テーブルには VARCHAR、TEXT、BLOB 型のフィールドはありません。これらのフィールドのいずれかを含めている限り、テーブルは「固定長の静的テーブル」ではなくなり、MySQL エンジンは別の方法でテーブルを処理します。
固定長テーブルを使用すると、MySQL の検索が高速になるため、パフォーマンスが向上します。これらの固定長により、次のデータのオフセットの計算が容易になるため、読み取りも自然に高速になります。また、フィールドが固定長でない場合、次のフィールドを検索するたびに、プログラムは主キーを検索する必要があります。また、固定長テーブルはキャッシュと再構築が容易です。ただし、唯一の副作用は、固定長フィールドは使用するかどうかに関係なく非常に多くのスペースを必要とするため、固定長フィールドによってスペースが浪費されることです。
5. ThinkPHP 3.0 アーキテクチャ 3 (コア動作ドライバー) の動作を理解するにはどうすればよいですか?
回答: Core Behavior Driven
TP の公式略称: CBD
コア: フレームワークのコア コードであり、不可欠なものです。 TP自体 MVCの考え方に基づいて開発されたフレームワークです。
動作 (動作): 動作は、ThinkPHP の新バージョンのアーキテクチャにおいて決定的な役割を果たします。システム コアの上に多くのタグ拡張ビットがあり、各タグ位置は独自の独立した動作を実行できます。順番に。このようにして動作拡張機能が誕生し、多くのシステム機能も組み込みの動作拡張機能によって完成されます。すべての動作拡張機能は置き換え可能であり、追加可能であるため、基礎となるフレームワークのアセンブリの基礎を形成します。
ドライバー: データベース ドライバー、キャッシュ ドライバー、タグ ライブラリ ドライバー、テンプレート エンジン ドライバー、および外部クラス拡張機能。
フレーム、つまりフレームワーク。実際、これは特定のアプリケーションの半完成品であり、独自のシステムを完成させるために選択して使用するコンポーネントのセットです。簡単に言うと、他人が用意した舞台を利用してパフォーマンスをすることです。さらに、フレームワークは一般的に成熟しており、継続的にアップグレードされるソフトウェアです。
6. 従来の構成は何ですか?
回答: 従来の構成 前のページ 次のページ 規則は構成よりも重要です。これはシステムが従う重要な考え方です。システムには組み込みの規則構成ファイル (Conf\convention.php) があります。システム ディレクトリの下にあります)、共通パラメータはほとんどの用途に応じてデフォルトで設定されています。そのため、アプリケーションプロジェクトの設定ファイルは、従来の設定とは異なる設定パラメータや新たな設定パラメータを設定するだけで済む場合が多く、デフォルト設定を完全に採用する場合は、設定ファイルを定義する必要すらありません。
従来の構成ファイルはシステムによって自動的にロードされるため、プロジェクトにロードする必要はありません。
7. SQL インジェクションとは何ですか? (理解)
回答: SQL インジェクション攻撃は、ハッカーがデータベースを攻撃するために使用する一般的な手段の 1 つです。プログラマーの中には、コードを記述するときにユーザー入力データの合法性を判断しない人もいます。インジェクターはデータベース クエリ コードをフォームに入力して送信できます。プログラムは送信された情報を組み合わせて完全な SQL ステートメントを生成し、サーバーは悪意のある SQL コマンドを実行します。インジェクターは、プログラムから返された結果に基づいて機密データを取得し、サーバー全体を制御することにも成功します (これが SQL インジェクションです)。
8. ThinkPHP はどのようにして SQL インジェクションを防止しますか? (理解)
答え: (1) より安全な方法であるクエリ条件に配列を使用するようにしてください;
(2) 文字列クエリ条件を使用する必要がある場合は、次のようにします。前処理メカニズム;
(3) データ フィールド タイプの検証をオンにすると、数値データ タイプの変換を強制できます; (フィールド タイプの検証はバージョン 3.1 以降必須です)
(4) 自動検証および自動補完メカニズムを使用して、アプリケーション固有のフィルタリングをカスタマイズします。
(5) フィールド タイプ チェック、自動検証、および自動補完メカニズムを使用して、悪意のあるデータの入力を回避します。
9. デバッグ モードを有効にするにはどうすればよいですか?デバッグモードの利点は何ですか?
回答: デバッグ モードをオンにするのは非常に簡単です。定数定義コードの行をエントリ ファイルに追加するだけです:
開発フェーズが完了し、それをデプロイした後運用環境では、デバッグ モードを削除するだけで済み、デプロイメント モードに切り替えるコードを定義します。デバッグ モードをオンにすると、システムは最初にシステムのデフォルトのデバッグ構成ファイルをロードし、次にプロジェクトのデバッグ構成ファイルをロードします。デバッグ モードの利点は次のとおりです: ログをオンにすると、エラー情報とデバッグ情報がすべて記録されます。デバッグを容易にするための詳細; テンプレート キャッシュをオフにする、テンプレートの変更はすぐに有効になります; SQL ログを記録して SQL 分析を容易にする; フィールド キャッシュをオフにする、データ テーブル フィールドの変更はキャッシュの影響を受けません; ファイルの大文字と小文字を厳密にチェックします (Windows プラットフォームでも) 、Linux 導入の問題を事前に発見するのに役立ち、便利です 開発、テスト、デモンストレーションなど、開発プロセスのさまざまな段階で使用される独立したプロジェクト構成ファイルは、さまざまなアプリケーション モードに合わせて構成できます。
10. TP ではどのような構成モードがサポートされていますか?優先度?
回答: ThinkPHP はプロジェクト構成に独自の階層構成モードを作成しました。その構成レベルは次のように反映されます: 従来の構成 -> プロジェクト構成 -> デバッグ構成 -> グループ構成 -> ;拡張構成 -> 動的構成
# 上記は構成ファイルの読み込み順序です。後続の構成は前の構成を同じ名前で上書きします (有効になりません)。優先順位は右から左。 。
11. TP の URL パターンは何ですか?デフォルトはどれですか?
回答: ThinkPHP は、通常モード、PATHINFO、REWRITE、互換モードを含む 4 つの URL モードをサポートしており、URL_MODEL パラメーターを設定することで定義できます。
デフォルトのモードは次のとおりです: PATHINFO モード、URL_MODEL を 1
に設定します。 12. TP のシステム変数は何ですか?システム変数を取得するにはどうすればよいですか?
回答: システム変数を取得する方法:
アクションで次のメソッドを呼び出すだけです:
$this->メソッド名 ("変数名" , ["フィルタ方法"],["デフォルト値"])
13. ThinkPHP フレームワークの D 関数と M 関数の違いは何ですか?
回答: M メソッドでは、モデルをインスタンス化するときに、ユーザーが各データ テーブルのモデル クラスを定義する必要はありません。D メソッドは、モデル クラスを自動的に検出できます。カスタム モデル クラスが存在する場合、カスタム モデル クラスをインスタンス化します。存在しない場合は、M メソッドが自動的に呼び出されて、Model 基本クラスをインスタンス化します。同時に、インスタンス化されたモデルは繰り返しインスタンス化されません (シングル ケース モード)。
関連する学習に関する推奨事項:thinkphp
以上が2018PHP 面接の質問: ThinkPHPの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。