PHPマジック変数とマジック関数の詳しい解説_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:06:18
オリジナル
783 人が閲覧しました

PHP マジック変数とマジック関数の詳細な説明

この記事では、PHP マジック変数とマジック関数を学習して理解できるように、主に PHP マジック変数とマジック関数を簡単に紹介し、使用例を紹介します。それを参照してください。

マジック変数

PHP は、実行するスクリプトに多数の事前定義された定数を提供します。

ただし、多くの定数はさまざまな拡張ライブラリによって定義されており、これらの拡張ライブラリがロードされるとき、動的ロード後、またはコンパイル中に組み込まれた場合にのみ表示されます。

コード内の位置に応じて値が変化する魔法の定数が 8 つあります。

たとえば、__LINE__ の値は、スクリプト内のどの行にあるかによって異なります。これらの特別な定数は、次のように大文字と小文字が区別されません:

__LINE__

ファイル内の現在の行番号。

例:

コードは次のとおりです:


echo 'これは " . __LINE__ . ' " 行です';
?>

上記の例の出力結果は次のとおりです:

コードは次のとおりです:


これは「2」行目です

__ファイル__

ファイルのフルパスとファイル名。インクルードされたファイル内で使用された場合、インクルードされたファイルの名前を返します。

PHP 4.0.2 以降、__FILE__ には常に絶対パス (シンボリック リンクの場合は解決された絶対パス) が含まれますが、それより前のバージョンには相対パスが含まれる場合がありました。

例:

コードは次のとおりです:


echo 'ファイルは " ' . __FILE__ . ' " ';
にあります ?>

上記の例の出力結果は次のとおりです:

コードは次のとおりです:


ファイルは「 E:wampwwwtestindex.php 」にあります

__DIR__

ファイルが配置されているディレクトリ。インクルードされたファイル内で使用された場合、インクルードされたファイルが配置されているディレクトリを返します。

dirname(__FILE__) と同等です。ルート ディレクトリでない限り、ディレクトリ名には末尾のスラッシュは含まれません。 (PHP 5.3.0の新機能)

例:

コードは次のとおりです:


echo 'ファイルは " ' . __DIR__ . ' " ';
にあります ?>

上記の例の出力結果は次のとおりです:

コードは次のとおりです:


ファイルは「 E:wampwwwtest 」にあります

__機能__

関数名 (PHP 4.3.0 で新しく追加されました)。 PHP 5 以降、この定数は定義されたとおりの関数名を返します (大文字と小文字は区別されます)。 PHP 4 では、この値は常に小文字です。

例:

コードは次のとおりです:


関数テスト() {
echo '関数名は:' __FUNCTION__ ;
}
テスト();
?>

上記の例の出力結果は次のとおりです:

コードは次のとおりです:


関数名: テスト

__クラス__

クラスの名前 (PHP 4.3.0 の新機能)。 PHP 5 以降、この定数は定義されたときのクラスの名前を返します (大文字と小文字は区別されます)。

PHP 4 では、値は常に小文字です。クラス名には、それが宣言されているスコープが含まれます (例: FooBar)。 PHP 5.4 以降、__CLASS__ はトレイトに対しても機能することに注意してください。特性メソッド内で使用される場合、__CLASS__ は特性メソッドを呼び出すクラスの名前になります。

例:

コードは次のとおりです:


クラステスト{
function _print() {
echo 'クラス名:' . __CLASS__ . "
";
echo '関数名は:' __FUNCTION__ ;
}
}
$t = 新しいテスト();
$t->_print();
?>

上記の例の出力結果は次のとおりです:

クラス名: テスト
関数名:_print

__特徴__

トレイト名 (PHP 5.4.0 の新機能)。 PHP 5.4.0 以降、PHP はトレイトと呼ばれるコード再利用の方法を実装しています。

トレイト名には、それが宣言されるスコープが含まれます (FooBar など)。

基本クラスから継承されたメンバーは、挿入された SayWorld トレイトの MyHelloWorld メソッドによってオーバーライドされます。その動作は、MyHelloWorld クラスで定義されたメソッドと一致しています。優先順位としては、現在のクラスのメソッドが特性メソッドをオーバーライドし、特性メソッドが基本クラスのメソッドをオーバーライドします。

コードは次のとおりです:


クラスベース{
パブリック関数sayHello() {
エコー「こんにちは」;
}
}
{
パブリック関数sayHello() {
親::sayHello();
エコー「ワールド!」;
}
}
class MyHelloWorld extends Base {

}
$o = 新しい MyHelloWorld();
$o->sayHello();
?>

上記のルーチンは次のように出力します:

コードは次のとおりです:


ハローワールド!

__方法__

クラスのメソッド名 (PHP 5.0.0 で新しく追加されました)。定義されたとおりのメソッド名を返します (大文字と小文字が区別されます)。

例:

コードをコピーします。コードは次のとおりです:


関数テスト() {
echo '関数名:' . __METHOD__ ;
}
テスト();
?>

上記の例の出力結果は次のとおりです:

コードは次のとおりです:


関数名: テスト

__名前空間__

現在の名前空間の名前 (大文字と小文字が区別されます)。この定数はコンパイル時に定義されます (PHP 5.3.0 の新機能)。

例:

コードは次のとおりです:


名前空間 MyProject;
echo '名前空間は: "', __NAMESPACE__, '"' // 出力 "MyProject"
; ?>

上記の例の出力結果は次のとおりです:

コードは次のとおりです:


名前空間は「MyProject」です

魔法の機能

__construct()
オブジェクトがインスタンス化されるときに呼び出されます。
__construct とクラス名の関数が同時に存在する場合、__construct が呼び出され、もう一方は呼び出されません。

__destruct()
オブジェクトが削除されたとき、またはオブジェクトの操作が終了したときに呼び出されます。

__call()
オブジェクトはメソッドを呼び出します
メソッドが存在する場合は、それを直接呼び出します
; 存在しない場合は、__call 関数が呼び出されます。

__get()
オブジェクトのプロパティを読み取るときは、
属性が存在する場合は、属性値が直接返されます
存在しない場合は、__get 関数が呼び出されます。

__set()
オブジェクトのプロパティを設定するときは、
属性が存在する場合は、値を直接割り当てます
存在しない場合は、__set 関数が呼び出されます。

__toString()
オブジェクトを印刷するときに呼び出されます。 echo $obj; や print $obj; など

__クローン()

オブジェクトのクローンを作成するときに呼び出されます。例: $t=new Test();$t1=clone $t;

__睡眠()

Serialize は以前に呼び出されました。オブジェクトが比較的大きく、シリアル化する前に少し削除したい場合は、この関数を検討できます。

__ウェイクアップ()

これは、オブジェクトの初期化作業を行うために unserialize が使用されるときに呼び出されます。

__isset()

オブジェクトのプロパティが存在するかどうかを確認するときに呼び出されます。例: isset($c->name)。

__unset()

オブジェクトのプロパティの設定を解除するときに呼び出されます。例: unset($c->name)。

__set_state()

var_export が呼び出されたときに呼び出されます。 __set_state の戻り値を var_export の戻り値として使用します。

__autoload()

オブジェクトをインスタンス化するときに、対応するクラスが存在しない場合は、このメソッドが呼び出されます。

上記がこの記事の全内容です。皆さんはマジック変数とマジック関数について新たに理解できましたか?この記事の内容を気に入っていただけたでしょうか。

http://www.bkjia.com/PHPjc/960580.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/960580.html技術記事 PHP マジック変数とマジック関数の詳細な説明 この記事では、PHP マジック変数とマジック関数を学び、理解できるように、主に PHP マジック変数とマジック関数を簡単に紹介します...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート