ホームページ >バックエンド開発 >PHPチュートリアル >PHP マジック定数の概要とマジック関数の使用コード手順の概要

PHP マジック定数の概要とマジック関数の使用コード手順の概要

伊谢尔伦
伊谢尔伦オリジナル
2017-07-17 15:18:201402ブラウズ

魔法定数

1. LINE
ファイル内の現在の行番号を返します。

2. FILE
ファイルの完全なパスとファイル名を返します。 インクルード ファイルで使用された場合は、インクルード ファイル名を返します。 PHP 4.0.2 以降、FILE には常に絶対パスが含まれますが、それより前のバージョンには相対パスが含まれる場合がありました。

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

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

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

マジック関数とは何ですか?

冒頭の関数は、set() get() など、特定の条件下でトリガーされる関数です。 get() set() isset() unset() call() call
( )
sleep() wakeup() to
String
() set_state() clone() autoload() construct() オブジェクトがインスタンス化されると、オブジェクトのこのメソッドが最初に呼び出されます。 destruct() このメソッドは、オブジェクトが削除されるか、オブジェクトの操作が終了するときに呼び出されます。

class test1 { 
public function construct() { 
var_dump(function); 
} 
public function destruct() { 
var_dump(function); 
} 
} 
$t1 = new test1 ; 
unset($t1);
get は、存在しないプロパティを読み取ろうとしたときに呼び出されます。 set は、存在しないプロパティに値を書き込もうとするときに呼び出されます。
isset は、存在しないプロパティを検出しようとするときに呼び出されます。
unset は、存在しないプロパティの設定を解除しようとすると呼び出されます。

class test2 { 
public $name3; 
public function set($key, $value) { 
var_dump(function. ' 
KEY:' 
.$key.' 
Value:' 
.$value); 
} 
public function get($key) { 
var_dump(function. 'KEY:'.$key); 
} 
public function isset($key) { 
var_dump(function. ' KEY:'.$key); 
} 
public function unset($key) { 
var_dump(function. ' KEY:'.$key); 
} 
} 
$t =new test2 ; 
$t->name = "steven"; 
$t->name2; 
$t->name3; 
isset($t->name2); 
isset($t->name3); 
unset($t->name4);

sleep はオブジェクトをシリアル化するときに呼び出されます
wakeup はオブジェクトを逆シリアル化するときに呼び出されます
1 つの注意点:
1. sleep() は配列またはオブジェクトを返す必要があり (通常は $this が返されます)、戻り値は次のようになりますシリアル化された

値として使用されます。

この値が返されない場合、シリアル化は失敗します。これは、逆シリアル化によってウェイクアップ イベントがトリガーされないことも意味します。
2. シリアル化では、デフォルトで割り当てられた属性が保存されます。インスタンス化によってコンテンツを割り当てたい場合は、sleep() によって返される配列で属性を指定する必要があります。たとえば、$id と $id2 の違いです。

class test3 { 
public $name = "steven"; 
public $id = "1"; public $id2; 
public function sleep() { 
var_dump(function); // 序列化不成功.没有返回值.反序列也失败 // 
return array("name"); // 序列化成功.有返回值.反序列成功.id2属性能被恢复 // 
return array("name", "id2");// 序列化成功.有返回值.反序列成功.id2属性不能被恢复 
return array("name"); } 
public function testEcho() { 
var_dump($this->name); 
var_dump($this->id); 
var_dump($this->id2); 
} 
public function wakeup() { 
var_dump(function); 
$this->testEcho(); 
} 
} 
$t3= new test3 ; 
$t3->id2 = uniqid(); 
$t3s = serialize($t3); 
unserialize($t3s);

toString は直接指定する必要があります。 このメソッドは、オブジェクトを印刷するときに呼び出されます。
class test4 { 
public function toString() { 
return "toString"; 
} 
} 
$t4 = new test4(); 
echo $t4; 
print $t4; 
var_dump($t4); 
print_r($t4);


call($func, $param) は、存在しないメソッドを呼び出そうとするときに呼び出されます。
このメソッドには 2 つのパラメータが必要です。 1 つ目は呼び出されるメソッドの名前、2 つ目は呼び出されるメソッドのパラメータ配列です。
サブクラスの親クラスのプライベート メソッドを呼び出す場合、またはインスタンスのクラスの保護されていないメソッドを呼び出す場合、

class test5 { 
public function call($func, $param) { 
var_dump('Function:'.$func); 
var_dump($param); 
} 
} 
$t5 = new test5; 
$t5->echoTest('xx','xx','xx');

callStatic() の場合、call() は呼び出されないことに注意してください。存在しない

static
メソッド
を呼び出すときに呼び出されます。このメソッドには 2 つのパラメータが必要です。1 つ目は呼び出されるメソッドの名前で、2 つ目は呼び出されるメソッドのパラメータ配列です。
PHP5.3 で登場

class test51 { 
public function callStatic($fun, $param) { 
var_dump('Function:'.$func); 
var_dump($param); 
} 
} 
test51::test('xx','xx','xx');

set_state() は、var_export を使用してインスタンスがエクスポートされるときに呼び出されます。このメソッドには、エクスポートされたインスタンスのすべてのメンバー属性を含む配列であるパラメーターがあります。

class test6 { 
public function set_state($arr){ 
var_dump($arr); 
} 
} 
$t6 = new test6; 
$t6->age = "12"; 
var_export($t6, true); 
var_export($t6); 
eval(' 
$b=' 
.var_export($t6,true).';'); 
print_r($b);

clone() のクローン作成時に呼び出されます。 注: 1. php5 では、オブジェクト間の割り当ては常にアドレス参照によって渡されます。
2. 実際の値によって渡したい場合は、clone キーワードを使用する必要があります。
3 .clone は単なるインスタンスです。インスタンス内のメンバー属性もインスタンスである場合、このメンバー属性は参照メソッドを使用して新しいインスタンスに渡されます。

// オブジェクト間の代入は常にアドレス参照で渡されます。$t71 の age 属性は同じです。インスタンス化を作成するときに、対応するクラスが存在しない場合は、

が呼び出されます。りー

以上がPHP マジック定数の概要とマジック関数の使用コード手順の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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