この記事は、(include/require)_onceを使用すべきではない理由を詳細に分析して紹介したものです。必要な友達は、includeと
include_onceのどちらを使用するかについてを参照してください(以下、すべてinclude) require_once)、この議論は非常に長く、結論は常に、つまり include_once の代わりに include を使用してみてください、というものでした。これまでの最も一般的な理由は、include_once がロードされたファイル リストを確認するためにクエリする必要があるということでした。
これは本当で、この理由は正しいですが、今日話したいのは別の理由です
ファイルがロードされているかどうかを判断するには、PHP が次のことを行う必要があることがわかっています。ファイルの open_path を取得するには、たとえば次のことを意味します:
コードをコピー コードは次のとおりです:
<?php set_include_path ("/tmp/:/tmp2/"); include_once("2.php"); ?>
PHP が include_once "2.php" を認識した場合、実際のパスが何かはわかりません。このファイルはあり、ロードされたファイルのリストから移動することはできません。ロードされているかどうかを判断するため、include_once の実装では、最初にファイルの実際のパスを解析しようとします (通常のファイルの場合、この解析はチェックと同じです) getcwd とファイル パス。相対パスの場合、通常は成功しません)。解析が成功した場合は、EG (include_files) を検索します。存在する場合は、それが含まれていることを意味し、そうでない場合は返します。ファイルを開いてファイルのopened_pathを取得します。たとえば、上記の例では、このファイルは「/tmp2/2.php」に存在します
その後、open_pathを取得した後、PHPはロードされたファイルのリストに移動して検索します。含まれていない場合は、ファイルを開く必要はありません。
1. 正常に解析できた場合は、ファイル パスの絶対値を解析してみます。 EG (include_files) を確認し、存在する場合は戻り、存在しない場合は続行します
2. ファイルを開き、ファイルのオープンパス (opened path) を取得します
3. オープンされたパスを取得し、EG (include_files) を検索します。 、存在するかどうか、存在する場合は戻り、存在しない場合は続行します
4. ファイルをコンパイルする (compile_file)
ほとんどの場合、これは問題ありませんが、問題は APC を使用する場合にあります...
ときAPC を使用すると、APC はコンパイル済みファイルへのcompile_file ポインターをハイジャックし、それによってコンパイル結果をキャッシュから直接取得し、実際のファイルを開いたり、オープンするためのシステムコールを回避したりできます。
ただし、コード内で include_once を使用する場合は、compile_file の前に、 , PHP はすでにファイルを開こうとしていますが、APC によってハイジャックされたコンパイル ファイルを入力すると、この問題を解決するために、APC は include_once_override を導入し、PHP の ZEND_INCLUDE_OR_EVAL をハイジャックします。 opcodeハンドラーを呼び出し、statを通じてファイルの絶対パスを決定します。その後、それがロードされていないことが判明した場合は、opcodeを書き換えてインクルードし、トリッキーな解決策を作成します。
しかし、それは残念です。 APC の include_once_override が適切に実装されておらず、次のような未定義の問題が発生する可能性があると言われています。
コードをコピーします コードは次のとおりです:
<?php set_include_path("/tmp"); function a($arg = array()) { include_once("b.php"); } a(); a(); ?>
そして、私たちの b.php は " に配置されます。 /tmp/ b.php"、内容は次のとおりです:
コードは次のとおりです:
<?php class B {} ?>
次に、apc.include_once_override がオンになっている場合、継続的にアクセスすると次のエラーが発生します:
致命的なエラー - include () : クラス b を再宣言できません
これらの技術的要因を除けば、私は常に include_once の代わりに include を使用すべきであると信じてきました。なぜなら、自分で完全に計画でき、ファイルは 1 回だけロードされるからです。 自動ロードも使用できます。 これを行うには
include_once を使用する場合、それはコードに自信がないことを証明するだけです。
したがって、もう include_once を使用しないことをお勧めします。
以上がinclude_once (require_once) はできるだけ使用しないことをお勧めしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

繊維はPhp8.1で導入され、同時処理機能が改善されました。 1)繊維は、コルーチンと同様の軽量の並行性モデルです。 2)開発者がタスクの実行フローを手動で制御できるようにし、I/O集約型タスクの処理に適しています。 3)繊維を使用すると、より効率的で応答性の高いコードを書き込むことができます。

PHPコミュニティは、開発者の成長を支援するための豊富なリソースとサポートを提供します。 1)リソースには、公式のドキュメント、チュートリアル、ブログ、LaravelやSymfonyなどのオープンソースプロジェクトが含まれます。 2)StackOverFlow、Reddit、およびSlackチャネルを通じてサポートを取得できます。 3)開発動向は、RFCに従うことで学ぶことができます。 4)コミュニティへの統合は、積極的な参加、コード共有への貢献、および学習共有への貢献を通じて達成できます。

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。
