ホームページ php教程 PHP开发 PHPのマジック変数とマジック関数の詳しい解説

PHPのマジック変数とマジック関数の詳しい解説

Dec 13, 2016 pm 06:03 PM

マジック変数

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

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

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

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

__LINE__

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

例:

<?php
echo &#39;这是第 “ &#39;  . __LINE__ . &#39; ” 行&#39;;
?>
ログイン後にコピー

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

这是第 “ 2 ” 行
ログイン後にコピー

__FILE__

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

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

例:

?php
echo &#39;该文件位于 “ &#39;  . __FILE__ . &#39; ” &#39;;
?>
ログイン後にコピー

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

该文件位于 “ E:\wamp\www\test\index.php ”
ログイン後にコピー

__DIR__

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

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

例:

<?php
echo &#39;该文件位于 “ &#39;  . __DIR__ . &#39; ” &#39;;
?>
ログイン後にコピー

上記の例の出力結果は次のようになります:

该文件位于 “ E:\wamp\www\test ”
ログイン後にコピー

__FUNCTION__

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

例:

?php
function test() {
 echo  &#39;函数名为:&#39; . __FUNCTION__ ;
}
test();
?>
ログイン後にコピー

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

函数名为:test
ログイン後にコピー
ログイン後にコピー

__CLASS__

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

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

例:

<?php
class test {
 function _print() {
  echo &#39;类名为:&#39;  . __CLASS__ . "<br>";
  echo  &#39;函数名为:&#39; . __FUNCTION__ ;
 }
}
$t = new test();
$t->_print();
?>
ログイン後にコピー

上記の例の出力結果は次のようになります:

クラス名: test
関数名: _print

__TRAIT__

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

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

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

<?php
class Base {
    public function sayHello() {
        echo &#39;Hello &#39;;
    }
}
 {
    public function sayHello() {
        parent::sayHello();
        echo &#39;World!&#39;;
    }
}
class MyHelloWorld extends Base {
    
}
$o = new MyHelloWorld();
$o->sayHello();
?>
ログイン後にコピー

上記のルーチンは次を出力します:

Hello World!
ログイン後にコピー

METHOD__

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

例:

<?php
function test() {
 echo  &#39;函数名为:&#39; . __METHOD__ ;
}
test();
?>
ログイン後にコピー

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

函数名为:test
ログイン後にコピー
ログイン後にコピー

__NAMESPACE__

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

例:

<?php
namespace MyProject;
echo &#39;命名空间为:"&#39;, __NAMESPACE__, &#39;"&#39;; // 输出 "MyProject"
?>
ログイン後にコピー

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

命名空间为:"MyProject"
ログイン後にコピー

Magic function

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

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

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

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

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

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

__clone()
などは、オブジェクトの複製時に呼び出されます。例: $t=new Test();$t1=clone $t;

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

__wakeup()
アンシリアル化時に呼び出され、オブジェクトの初期化作業が行われます。

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

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

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

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

上記がこの記事の全内容です。皆さんはマジック変数とマジック関数について新たに理解できましたか? この記事の内容を気に入っていただけたでしょうか。詳細については、PHP 中国語 Web サイト (www. php.cn)!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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