ホームページ > バックエンド開発 > PHPチュートリアル > PHPの魔法の方法と定義済み定数

PHPの魔法の方法と定義済み定数

Lisa Kudrow
リリース: 2025-02-28 09:42:09
オリジナル
894 人が閲覧しました

Magic Methods and Predefined Constants in PHP

コアポイント

  • PHPは、コード機能を強化するための事前定義の定数と魔法の方法を提供します。事前定義された定数は、コードとPHPに関する読み取り専用の情報を提供しますが、魔法の方法はクラスに予約されている名前であり、特別なPHP機能を有効にします。
  • 定義された定数(ダブルアンダースコアで囲まれたすべての大文字)は、コードに関する情報を提供します。例には、__LINE__(ソースファイルの行番号を返します)、__FILE__(そのフルパスを含むファイル名を表します)、__DIR__(ファイルパスのみを表します)、__CLASS__(現在のクラスの名前を返す)、(現在の関数の名前を返す)、__FUNCTION__ __METHOD__ __NAMESPACE__魔法の方法は、特別なPHP動作にリンクするメカニズムを提供します。
  • (クラスのオブジェクトインスタンスを作成するために使用)、
  • (PHPのゴミコレクターによってオブジェクトが破壊された場合)、__construct()(プロパティが未定義またはgetterコンテキストで呼び出された場合)、__destruct()セットを解除したい)、および__get()(オブジェクトを文字列として表すのに役立ちます)。 __set() __isset() __unset()PHPは、プログラムに定義された定数と魔法の方法の特別なセットを提供します。 __toString()で設定された定数とは異なり、これらの定数の値はコードの使用場所に依存し、コードとPHPに関する読み取り専用情報にアクセスするために使用されます。マジックメソッドは、特別なPHP機能に引っ掛けるためにクラスで使用できる予約メソッド名です。 PHPの魔法の方法と定数について学んだことがないなら、この記事はあなたのためです!より便利な方法とコードでそれらを使用する方法をいくつか確認します。

事前定義された定数define()

定義された定数は、コードに関する情報にアクセスするために使用されます。ここの定数は、などの二重のアンダースコアで囲まれたすべての大文字に記載されています。 PHP:

によって提供されるいくつかの有用な定数を以下に示します
  • __LINE__以下に示すように、ソースファイルに表示される定数の行番号を返します。
<?php
echo "line number: " . __LINE__; // line number: 2
echo "line number: " . __LINE__; // line number: 3
echo "line number: " . __LINE__; // line number: 4
?>
ログイン後にコピー
ログイン後にコピー
  • 以下に示すように、そのフルパスを含むファイルの名前を示します。 __FILE__
<?php
echo "the name of this file is: " . __FILE__;
// the directory and name of file is: C:wampwwwindex.php
?>
ログイン後にコピー
    ファイルへのパスのみを表します:
  • __DIR__
<?php
echo "the directory of this file is: " . __DIR__;
// the directory of this file is: C:wampwww
?>
ログイン後にコピー
    現在のクラスの名前を返します:
  • __CLASS__
<?php
class Sample {
    public function __construct() {
        echo __CLASS__;
    }
}
$obj = new Sample(); // Sample
?>
ログイン後にコピー
    現在の関数の名前を返します:
  • __FUNCTION__
<?php
function mySampleFunc() {
    echo "the name the function is: " . __FUNCTION__;
}
mySampleFunc(); //the name of function is: mySampleFunc
?>
ログイン後にコピー
    現在のメソッドの名前を表します:
  • __METHOD__
<?php
class Sample {
    public static function myMethod() {
        echo "the name of method is: " . __METHOD__;
    }
}
Sample::myMethod(); // the name of the method is: myMethod
?>
ログイン後にコピー
    現在の名前空間の名前を返します:
  • __NAMESPACE__
<?php
namespace MySampleNS;
echo "the namespace is: " . __NAMESPACE__;
// the name space is: MySampleNS
?>
ログイン後にコピー
魔法の方法

魔法の方法は、特別なPHP動作にリンクするメカニズムを提供します。以前の定数とは異なり、それらの名前は、

などの2つの主要なアンダースコアを使用して小文字/ラクダ文字で書かれています。 __construct()は、PHPによって呼ばれる魔法の方法で、クラスオブジェクトのインスタンスを作成します。任意の数のパラメーターを受け入れることができます。 __destruct() __construct() 名前が示すように、

メソッドは、PHPガベージコレクターによってオブジェクトが破壊されたときに呼び出されます。パラメーターは受け入れず、通常、データベース接続の閉鎖など、必要になる可能性のあるクリーニング操作を実行するために使用されます。
<?php
class MySample {
    public function __construct($foo) {
        echo __CLASS__ . " constructor called with $foo.";
    }
}
$obj = new MySample(42);
// MySample constructor called with 42
?>
ログイン後にコピー

__destruct()次のマジックメソッドは、プロパティのオーバーロードを処理し、PHPが未定義の(またはアクセスできない)プロパティとメソッド呼び出しを処理する方法を提供します。プロパティが未定義である(またはアクセスできない)場合、ゲッターコンテキストで呼び出された場合、PHPは

メソッドを呼び出します。この方法は、パラメーター、つまりプロパティの名前を受け入れます。プロパティの値と見なされる値を返す必要があります。
<?php
class MySample {
    public function __destruct() {
        echo __CLASS__ . " destructor called.";
    }
}
$obj = new MySample; // MySample destructor called
?>
ログイン後にコピー
メソッドは、セッターのコンテキストで未定義のプロパティのために呼び出されます。属性名と値の2つのパラメーターを受け入れます。

<?php
echo "line number: " . __LINE__; // line number: 2
echo "line number: " . __LINE__; // line number: 3
echo "line number: " . __LINE__; // line number: 4
?>
ログイン後にコピー
ログイン後にコピー

上記の例コードでは、プロパティ名はクラスで定義されていません。値「mysample」をそれに割り当てようとしましたが、PHPは魔法の方法__set()を呼び出します。 「名前」を$propパラメーターとして、「alireza」は$valueとして取得し、値をプライベート$myArray配列に保存します。 __get()メソッドは同様に機能します$obj->nameの場合、__get()メソッドが呼び出され、「name」が$propパラメーターとして渡されます。サンプルコードにも表示される、アクセス可能なメンバー変数を取得して確認するのに役立つ他の魔法の方法があります:__isset()__unset()、および__toString()__isset()__unset()は、両方ともPHPの同じ名前(アンダースコアなし)の関数によってトリガーされます。 __isset()プロパティが設定されているかどうかを確認し、テストするプロパティであるパラメーターを受け入れます。 __unset()パラメーター、つまりプログラムが解明したいプロパティの名前を受信します。多くの場合、ユーザーや他のプロセスへの出力など、オブジェクトを文字列として表すことが有用です。通常、PHPはそれらをメモリ内のIDとして表しますが、これは私たちにとって良くありません。この方法は、オブジェクトを文字列として表すのに役立ちます。このメソッドは、オブジェクトが文字列として使用される場合、たとえば__toString()としてトリガーされます。また、他の通常のパブリックメソッドと同様に直接呼ぶこともできます。これは、キャストする空の文字列を追加するなどのトリックよりも好ましいものです。 echo "Hello $obj"

概要

オブジェクト指向プログラミングは、メンテナンスとテストが簡単なコードを作成できます。より良い、より標準的なPHPコードを作成するのに役立ちます。さらに、PHPが提供する魔法の方法と定数を利用できます。

stepan kapl / shutterstock の写真 PHPマジックメソッドと事前定義された定数のFAQ PHPの魔法方法のさまざまな種類は何ですか?

PHPの魔法方法は、特定の条件が満たされたときに自動的にトリガーされる特別な機能です。彼らは常に二重のアンダースコア()から始めます。 PHPのさまざまな種類の魔法方法が含まれます`

construct()

destruct()

call()callstatic()get()set()set()sleep()wakeup()toString()invoke()set_state()clone()

PHPで定義された定数を使用する方法は?

PHPの事前定義された定数は、常に組み込みの定数を使用できます。これらには、さまざまな拡張機能によって定義された他の多くの定数と同様に、

PHP_VERSIONなどのコア定数が含まれます。事前定義された定数を使用するには、ドル記号($)を排除することなく、その名前を書くだけです。たとえば、PHPの現在のバージョンを取得するには、以下に示すようにPHP_OS定数を使用できます。 PHP_VERSIONPHPの魔法方法の目的は何ですか? echo PHP_VERSION;

PHPの

マジックメソッドは、クラスから新しいオブジェクトが作成されるたびに自動的に呼び出されます。通常、オブジェクトのプロパティを初期化するか、使用前にオブジェクトが必要とする設定を実行するために使用されます。 __construct()

自分の定数をPHPで定義できますか?

__construct()はい、

関数または

キーワードを使用して、PHPで独自の定数を定義できます。定数が定義されると、変更したり未定義になったりすることはできません。

PHPの魔法の方法と従来の方法の違いは何ですか? define() const魔法の方法とPHPの従来の方法の主な違いは、特定のイベントによって魔法の方法が自動的にトリガーされ、従来の方法を明示的に呼び出す必要があることです。また、魔法の方法は常にダブルアンダースコア(__)から始まりますが、従来の方法は常にそうではありません。

定数がPHPで定義されているかどうかを確認する方法は?

関数を使用して、定数がPHPで定義されているかどうかを確認できます。この関数は、定数の名前を文字列として取得し、定数が定義されている場合にtrueを返し、それ以外の場合はfalseを返します。

PHPの魔法方法の目的は何ですか?

PHPのdefined()

魔法のメソッドは、オブジェクトが破壊されるか、スクリプトが終了したときに自動的に呼び出されます。データベース接続の閉鎖やリソースの解放など、クリーンアップタスクを実行するためによく使用されます。

__destruct() PHPで静的な方法で魔法の方法を使用できますか?

はい、PHPで静的な方法を備えた魔法の方法を使用できます。クラスにはアクセスできない、または存在しない静的メソッドを呼び出すと、__destruct()魔法のメソッドが自動的に発生されます。

PHPの定義された定数のいくつかの一般的な用途は何ですか?

PHPの事前定義された定数は通常、PHP環境に関する情報を取得するか、特定の機能の動作を制御するために使用されます。たとえば、

定数を使用してPHPバージョンを確認でき、__callStatic()定数を使用してオペレーティングシステムを確認できます。

PHPで魔法の方法を書き直すことはできますか?

はい、PHPで魔法の方法を書き直すことができます。サブクラスを作成するときは、独自のMagicメソッドの実装を提供できます。ただし、親クラスの実装を呼び出す場合は、PHP_VERSIONキーワードを使用できます。 PHP_OS

以上がPHPの魔法の方法と定義済み定数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート