コンテキスト認識アプリケーションのPHPのマジック定数を分類します
PHPの7つの魔法の定数は、__line__、__file__、__dir__、__function__、__class__、__trait__、__method__であり、コードの場所とコンテキスト情報を動的に返すことができます。 1。ラインは、正確なデバッグのために現在の行番号を返します。 2。ファイルは、現在のファイルの絶対パスを返します。これは、ファイルを確実に導入したり、ルートディレクトリを定義したりするためによく使用されます。 3。dir現在のファイルが配置されているディレクトリを返します。これは、dirName(__ file__)よりも明確で効率的です。 4。関数は、関数レベルのログトラッキングに適した現在の関数名を返します。 5。クラスは、ログモードと工場モードでハードコーディングを回避し、現在のクラス名(名前空間を含む)を返します。 6.特性は特性でその名前を返します。これは、特性の動作をデバッグするのに役立ちます。 7.メソッド「Class :: Method」の形式で完全なメソッド名を返します。これは、詳細な通話トレースに適しています。さらに、__namespace__は、動的なインスタンス化またはルーティングのために現在の名前空間を取得できます。これらの定数の合理的な組み合わせは、コードの保守性とデバッグ効率を向上させることができますが、ログの冗長性は避け、特性のクラスと特性の行動の違いに注意を払う必要があります。それらは「魔法」と呼ばれますが、自動コンテキストの解析に基づいて組み込みの定数であり、コードをより自己認識します。
PHPの魔法の定数は、一見するとマイナーな機能のように思えるかもしれませんが、それらはコンテキスト認識、保守可能、デバッグに優しいアプリケーションを構築するための強力なツールです。通常の定数とは異なり、マジック定数はPHPによって事前に定義され、コードの使用場所に基づいて動的に変更されます。それらを理解することで、ロギング、デバッグ、モジュラーコードの構造を大幅に改善できます。

7つの魔法の定数の内訳と、実際のアプリケーションでそれらを効果的に使用する方法を次に示します。
1 __LINE__
- 実行ライン番号を追跡します
__LINE__
、使用されているファイルの現在の行番号を返します。これは、デバッグ中に特に役立ちます。

エコー「現在の線:」。 __ライン__;
使用事例:
ロギングエラーまたは実行フローのトレースを含める場合は、 __LINE__
を含めて、何かがうまくいかなかった場所を正確に特定します。
error_log( "erserが行で発生しました"。__line__。 "in"。__file__);
これは、特に大きな手続きファイルまたはレガシーコードで、一般的なメッセージよりも便利です。

2。__ __FILE__
- 現在のスクリプトへのフルパスを取得します
__FILE__
、ファイル名を含む現在のファイルへの絶対パスを提供します。
echo __file__; // EG、/var/www/project/index.php
使用事例:
一般に、現在のファイルの場所に関連するファイルを含めるために使用され、相対パスの問題を回避します。
require_once dirname(__ file__)。 '/config.php';
さらに良いことに、オートローディングで使用するか、ベースディレクトリを定義するときに使用してください。
define( 'app_root'、dirname(__ file__));
注:最新のPHPでは、 dirname(__DIR__)
ディレクトリを上げるためにしばしばクリーンです。
3。__ __DIR__
- dirname(__FILE__)
に代わるより安全な代替
はじめにPHP 5.3で、 __DIR__
現在のファイルのディレクトリを返しますdirname(__FILE__)
echo __dir__; // eg、/var/www/project/include
使用事例:
それを使用して、信頼できる依存関係またはロード構成ファイルを含める:
__dir__を含めます。 '/helpers.php';
読みやすく、 dirname(__FILE__)
よりもわずかに高速であるため、すべての新しいコードで推奨されるはずです。
4。__ __FUNCTION__
- 現在の関数を特定します
__FUNCTION__
、使用されている関数の名前を返します。
関数calculateTotal(){ エコー「内部関数:」。 __関数__; }
使用事例:
関数呼び出しのデバッグやトレースログの作成に最適です。
関数プロセスオーダー($ id){ error_log( "start"。__function__。 "Order ID:"。$ id); // ... }
注:クラスではなく、関数名のみを返します。クラスのコンテキストについては、 __METHOD__
を参照してください。
5。__ __CLASS__
- 現在のクラス名を取得します
__CLASS__
、該当する場合は名前空間を含め、使用されているクラスの名前を返します。
class Payneggateway { public function log(){ エコー「クラス:」。 __クラス__; } }
使用事例:
ロギング、工場パターン、またはハードコード名のないクラス固有の動作が必要な場合:
パブリック関数logerror($ message){ error_log( "[$ __ class__] $ message"); }
それは継承を尊重します。したがって、子どものクラスでさえ、それが書かれているクラスを返します(特性で使用されない限り - 以下を参照)。
6。__ __TRAIT__
- 現在の特性を特定します
特性内で使用すると、 __TRAIT__
特性の名前を返します。
特性ログ可能{ パブリック関数ログ($ msg){ echo "["。 __trait__。 "]」 $ msg; } }
使用事例:
特性を介して注入される動作をデバッグまたはログにするのに役立ちます。複数のクラスで特性が使用されている場合、 __TRAIT__
クラスではなく、特性の名前を引き続き返すことに注意してください。
7 __METHOD__
- 完全なメソッド名はクラスを含みます
__METHOD__
クラス名とメソッド名をClassName::methodName
形式で返します。
クラスユーザー{ パブリック関数save(){ エコー「メソッドと呼ばれる:」。 __方法__; //出力:ユーザー::保存 } }
使用事例:
特にAPIまたは複雑なオブジェクト階層での詳細なロギングとデバッグに最適:
パブリック関数fetchdata(){ error_log( "Entering"。__method__。 "at line"。__line__); }
__FUNCTION__
とは異なり、クラスのコンテキストが含まれているため、ログをより有益にします。
ボーナス: __NAMESPACE__
- 動的な名前空間処理用
常にCore Sevenにリストされているわけではありませんが、 __NAMESPACE__
現在の名前空間を返すもう1つの魔法の定数です。
namespace app \ controllers; echo __namespace__; // App \ Controllers
使用事例:
オートローディングロジック、動的クラスのインスタンス化、またはルーティングシステムに役立ちます。
$ fullclass = __namespace__。 '\\ usercontroller'; $ instance = new $ fullclass();
マジック定数を使用するための実用的なヒント
- 生産ログの過剰使用を避けます- 役立つ、過剰なライン番号またはメソッド名はログを混乱させる可能性があります。
-
より良いコンテキストのために組み合わせる-
__METHOD__ . '()' . ' at line ' . __LINE__
詳細なスタックトレースについては。 -
特性に注意してください- 特性の中で
__CLASS__
__TRAIT__
クラスを返します。違いを知る。 -
それらは名前が覆われていますが、慣習は大文字です- 常に
__FILE__
ではなく__file__
としてそれらを書きます。
魔法の定数は魔法ではありません。スマートでコンテキストを意識したツールをPHPに焼きました。思慮深く使用すると、アプリケーションをより自己認識し、デバッグしやすく、保守しやすくします。
基本的に、彼らはあなたのコードがそれがどこにあるかを知るのを助けます - そしてそれは強力です。
以上がコンテキスト認識アプリケーションのPHPのマジック定数を分類しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

phpevaluates constantexpressionsionsatimeTimetoepperpeperformandenableerrordetection.1.constantexpressionevaluationmeansComputingValuesduring during during during duringは、constantslikeliterals、class Conconstants、またはcledefinedconstants.2.phphphse

phpdoesnotalowcontantredeclarationbetweentraitsandclasses、rucesinginginafatalerror rurror rurorror radescuracrosstraits、parentclasses、olchildclasses;

ConstantsshouldbeusedtoenforceimmutabilityinPHPforbettercodeclarityandsafety;1)useconstantsforconfigurationanddomainlogiclikestatuscodesorAPIendpointstoavoidmagicvalues;2)preferclassorinterface-scopedconstantsoverglobalonestoimprovenamespacinganddisc

✅、constantans arefasterthanvariablesincompiledlanguagesduetocopile-timeevaluationandinlining.1.constantantantantantantantantantantantantantantantantantantantantatantantatantatantatimeating、constingvalueinlining、constryfolding、andelimination ofmemoryallocation、whire-bariablesuntimeruntimeruntimeruntimeruntimeRuntimeRuntimememorya

コンパイル時に解析し、パフォーマンスが向上し、名前空間をサポートするため、最初にconstを使用します。 2。条件と関数で定数を定義する必要がある場合、または動的名を使用する必要がある場合、define()を使用する必要があります。 3.クラス内の定数を定義するためにconstのみを使用できます。 4。定義()は、実行時に式を動的に定義し、名前空間文字列を完全に定義できます。 5.両方が定義されると、変更できませんが、定義()はdefined()を介して繰り返し定義を回避できますが、constはチェックできません。 6. const名は文字通りでなければならず、可変補間をサポートしていません。したがって、constは固定および明示的な定数に適しており、定義はランタイムロジックまたは動的命名を必要とするシナリオに適しています。

PHPの7つの魔法の定数は、__line__、__file__、__dir__、__function__、__class__、__trait__、__method__であり、コードの場所とコンテキスト情報を動的に返すことができます。 2。ファイルは、ファイルを確実に導入したり、ルートディレクトリを定義したりするためによく使用される現在のファイルの絶対パスを返します。 3。dir現在のファイルが配置されているディレクトリを返します。これは、dirName(__file__)よりも明確で効率的です。 4。関数は、関数レベルのログトラッキングに適した現在の関数名を返します。 5。クラスは、ログと工場で現在のクラス名(名前空間を含む)を返します

classConstantsArepublicbydefaultandcanbecontrolledvisibilityModifiers:1。publicallowsacss fromany where、2.protectedRestrictSacestotheclassanditssubclasses、3.privateLimitsacesstothedededededonly;
