ホームページ バックエンド開発 PHPチュートリアル PHP の錯覚関数とマジック定数

PHP の錯覚関数とマジック定数

Jun 13, 2016 pm 01:02 PM
class function nbsp php test

PHP のマジック関数とマジック定数

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

2. __destruct()
オブジェクトが削除されるか、オブジェクトの操作が終了するときに呼び出されます。
3. __call()
オブジェクトはメソッドを呼び出します。メソッドが存在する場合は直接呼び出され、存在しない場合は __call 関数が呼び出されます。
4. __get()
オブジェクトの属性を読み取る場合、属性が存在する場合は属性値が直接返され、存在しない場合は __get 関数が呼び出されます。
5. __set()
オブジェクトの属性を設定する場合、属性が存在する場合は値が直接割り当てられ、存在しない場合は __set 関数が呼び出されます。
6. __toString()
は、オブジェクトを印刷するときに呼び出されます。 echo $obj; または print $obj;
7 など。 __clone()
オブジェクトのクローンを作成するときに呼び出されます。例: $t=new Test();$t1=clone $t;
8. __sleep()
はシリアル化の前に呼び出されます。オブジェクトが比較的大きく、シリアル化する前に少し削除したい場合は、この関数を検討できます。
9. __wakeup()
は、シリアル化解除時に呼び出され、オブジェクトの初期化作業を実行します。
10. __isset()
は、オブジェクトの属性が存在するかどうかを確認するときに呼び出されます。例: isset($c->name)。
11. __unset()
オブジェクトのプロパティの設定を解除するときに呼び出されます。例: unset($c->name)。
12. __set_state()
は、var_export が呼び出されたときに呼び出されます。 __set_state の戻り値を var_export の戻り値として使用します。
13. __autoload()
オブジェクトをインスタンス化する際、対応するクラスが存在しない場合、このメソッドが呼び出されます。
[魔法定数]
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 で新しく追加されました)。定義されたとおりのメソッド名を返します (大文字と小文字が区別されます)。
(1) マジック メソッドの最初の紹介
Php5.0 は、リリース以来、多くのオブジェクト指向機能を提供してきました。特に、コーディングを簡素化し、より適切な設計を可能にする多くの使いやすいマジック メソッドを提供してきました。システム。今日はphp5.0が提供するマジックメソッドについて学びます。
1, __construct() オブジェクトをインスタンス化するとき、最初にオブジェクトのこのメソッドが呼び出されます。

class Test
{
function __construct(){
echo "before";
}
}
$t = new Test();

出力は次のとおりです:
start

class Test
{
function Test(){
echo "end2";
}
function __construct(){
echo "end";
}
}
$t = new Test();
//output end
?>
同じクラス名の php5 オブジェクト モデルと関数がクラスのコンストラクターであることがわかっているため、コンストラクターと __construct() メソッドを同時に定義すると、php5 は関数を呼び出す代わりにデフォルトでコンストラクターを呼び出します。同じ名前なので、__construct() クラス
2 のデフォルトのコンストラクターとして、__destruct() は、オブジェクトが削除されるか、オブジェクトの操作が終了するときにこのメソッドを呼び出します。

class Test
{
function __destruct(){
echo "end";
}
}
$t = new Test();

end
が出力され、オブジェクト操作
3 の最後にリソースを解放するなどの操作を実行できます。存在しないプロパティを読み取ろうとすると __get() が呼び出されます。
オブジェクトに存在しないプロパティを読み取ろうとすると、PHP はエラー メッセージを表示します。クラスに __get メソッドを追加すると、この関数を使用して Java のリフレクションと同様のさまざまな操作を実装できます。
class Test
{
public function __get($key)
{
echo $key . " が存在しません";
}
}
$t = new Test();
echo $t->name;
が存在しないプロパティに書き込もうとすると、
name が存在しません

4,__set() が出力されます。値に達すると、exist が呼び出されます。
クラス Test
{
パブリック関数 __set($key,$value){
echo 'pair'.$key . "value".$value;
}
}
$t = new Test();
$t->name = "aninggo";
は出力します:
名前 aninggo に値を追加します

5,__call( ) は存在しないオブジェクトのメソッドを呼び出そうとしたときに呼び出されます。
class Test
{
public function __call($Key, $Args){
echo "呼び出したい {$Key} メソッドは存在しません。渡されたパラメータは次のとおりです:" .print_r ($Args, true);
}
}
$t = new Test();
$t->getName(aning,go);
プログラムは次のように出力します:
呼び出したい getName メソッドは存在しません。パラメータは次のとおりです: Array
(
[0] => aning
[1] => go
)
6,__toString() はオブジェクトを印刷するときに呼び出されます
このメソッドこれは Java の toString メソッドに似ています。オブジェクトを直接印刷する場合、この関数を呼び出します
class Test
{
public function __toString(){
return "Print Test";
}
}
$t = new Test();
echo $t;

echo $t; が実行されると、$t->toString(); が呼び出されます。
print Test
7,__clone() オブジェクトが複製されると、
class Test
{
public function __clone(){
echo "コピーされました ! " が呼び出されます。 ;
}
}
$t = new Test();
$t1 = clone $t;
プログラム出力:
クローンが作成されました!
__sleep と __wakeup
Serialize は、オブジェクトを含む変数を連続バイト データに変換し、それらをファイルに保存したり、それらを元のデータに逆シリアル化したりできます。クラスのオブジェクトを逆シリアル化する前に定義すると、PHP はそのオブジェクトのプロパティとメソッドを正常に保存できます。このために、PHP は自動的に __sleep と __wakeup を検索します。
オブジェクトがシリアル化されると、PHP は __sleep メソッドを呼び出します (存在する場合)。オブジェクトを逆シリアル化した後、PHP は _ _wakeup メソッドを呼び出します。どちらのメソッドも属性を含む配列を返す必要はありません。 __sleep メソッドがない場合、PHP は他の属性の値を破棄します。
例 6.16 は、__sleep メソッドと __wakeup メソッドを使用してオブジェクトをシリアル化する方法を示しています。 Id 属性は、オブジェクト内に保持されることを意図していない一時的な属性です。逆にされた場合、__wakeup メソッドは、シリアル化されたオブジェクトに id 属性が含まれないことを保証します。この例は、自立するように設計されています。実際の開発では、リソース (画像やデータ ストリームなど) を含むオブジェクトに次のメソッドが必要になる場合があります。
オブジェクトのシリアル化
CODE: [コピー先]クリップボード]
------------------------------------------- --- --------
クラス ユーザー
{
public $name;
public $id;
function __construct() {
/ /ユーザーに一意の ID を与える 別の ID を与える
$this->id = uniqid();
}
function __sleep() {
//this をシリアル化しない -> ;id id をシリアル化しない
return(array("name"));
}
function __wakeup() {
//ユーザーに一意の ID を与える
$this->id = uniqid();
}
//オブジェクトを作成します
$u = 新しいユーザー
$u->name = "Leon";
/ / シリアル化します。id 属性がシリアル化されていないことに注意してください。id の値は破棄されます
$s = Serialize($u);
//シリアル化を解除し、逆シリアル化 ID が再割り当てされます
$u2 = unserialize($s);
//$u と $u2 は異なる ID を持ちます $u と $u2 は異なる ID を持ちます
print_r($u);
print_r($u2); >
__set_state と __invoke
テスト コードは次のとおりです。
class A {
public static function __set_state($args)
{
$ obj= new A();
foreach($args as $k=>$v){
$obj->$k = $v;
}
return $obj;
}
}

$a = 新しい A;
$a->名前 = 'cluries';
$a->性別 = '女性';
eval( '$b = ' . var_export($a, true).';');
print_r($b);
?>
プログラム出力
object(A)#2 (2){__SET_STATEの関数はオブジェクトをコピーすることであり、__SET_STATEで定義して、オブジェクトをコピーするときにコピーされたオブジェクトに変更を加えることができます。 __clone との違いは、__set_state がパラメータを受け入れることができ、__set_state の方が強力に使用できることです。個人的には、これはあまり役に立たないと思います = =!

次に、__invoke について話しましょう。
マニュアルの非常に特別なステートメント 顕著: 注: この機能は PHP 5.3.0 以降で利用可能です。
スクリプトがオブジェクトを関数として呼び出そうとすると、__invoke メソッドが呼び出されます。 使用時に呼び出されますか?ちょっと奇妙ですが、この関数は何に使うのでしょうか?
次に、提供されている例を見てみましょう:

class CallableClass {
function __invoke($x){
var_dump($x);
}
}
$obj=new CallableClass;
$obj(5);
var_dump(is_callable($obj));
?>
プログラム出力:
int( 5)
bool(true)
実際にはオブジェクトを関数として使用します...
__autoload

PHP5 には __autoload() というメソッドがあります。これは単に自動ロードです。クラスの数;
PHP が編成していないクラスを使用しようとすると、グローバル関数 __autoload が検索され、この関数が存在する場合、PHP はクラスの名前であるパラメーターを使用してそれを呼び出します。
次に、単純にテストします。

まず、「Test_autoload.php」という名前のファイルを作成します。
< php
/**
* __autoload メソッドをテストします
*
*/
class Test_autoload {
public function __construct ( ) {
echo " Test_autoload. " ;
}
}
?>
クラス名に注意し、ファイルを作成して __autoload() メソッドをオーバーライドします。 " test.php";
< php
/**
* __autoload メソッドをオーバーライドします
*/
function __autoload ( $class ) {
include $class ' ;
$test = new Test_autoload () ;
unset ( $test ) ;
?>
最終結果は次のとおりです。
------ -- ----------------------------------
8.ところで、php5
(1) で提供されている非常にCOOlな実験的な関数をいくつか紹介します。 runkit_method_rename
この関数は、呼び出す関数の名前を動的に変更できます。
class Test
{
function foo() {

'foo',//実際に呼び出される関数
'bar'// 呼び出される関数を表示する
) ;
echo Test::bar();
プログラムは出力します
FOO! (2) runkit_method_add
この関数は関数を動的に追加できます
class test
{
Function Foo () {
Return "Foo!";
}
}
runkit_method_add(
Test, //クラス名
'add', //新しい関数名
'$num1, $num2',//パラメータを渡す
'return $num1 + $num2;',//実行されたコード
RUNKIT_ACC_PUBLIC
);
//echo $e->add(12, 4);
(3) runkit_method_copy
はクラス A の関数をクラス B にコピーし、関数の名前を変更できます
class Foo {
function example( ) {
return "foo! ";
}
}
class Bar {
//空のクラス
}
//コピーを実行
runkit_method_copy('Bar ', 'baz', 'Foo', 'example') ;
//コピーした関数を実行
echo Bar::baz();
(4) runkit_method_redefine
戻り値を動的に変更関数の
この関数を使用すると、クラスにMOCKテストを簡単に実装できます。クールですね?
class Example {
function foo() {
return "foo! ";
}
}
//テストオブジェクトを作成します
$ e = new Example();
//
echo "Before: " を出力します。 $e->foo();
// 戻り値を変更します
runkit_method_redefine(
'Example ',
'foo',
'',
'return "bar! ";',
RUNKIT_ACC_PUBLIC
);
//実行出力
echo " 後: " . $e->foo();

(5)runkit_method_remove
この関数は非常に単純です。名前を見ればわかります。クラスから関数を動的に削除します
class Test {
function foo() {
return "foo! ";
}
function bar() {
return "bar! ";
}
}
//foo 関数を削除します
runkit_method_remove(
'Test',
'foo'
);
echo implode(' ', get_class_methods('Test')); >プログラム出力
バー

1階 バルド 2011-04-18

3. __call()
オブジェクトはメソッドを呼び出します。メソッドが存在する場合は、そのメソッドが直接呼び出されます。メソッドが存在しない場合は、__call 関数が呼び出されます。
4. __get()
オブジェクトの属性を読み取る場合、その属性が存在する場合はその属性値が直接返され、存在しない場合は __get 関数が呼び出されます。
5. __set()

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

実際には、アクセスされるすべての属性メソッドが存在しますが、それらはプライベートであり、呼び出しもトリガーされます。



2階 バルド 2011-04-18

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

3階 バルド 2011-04-18
1.オブジェクトをインスタンス化するときに __construct()
が呼び出されます。 __construct とクラス名と関数名の関数が同時に存在する場合、__construct が呼び出され、もう一方は呼び出されません。

7. __clone()
オブジェクトのクローンを作成するときに呼び出されます。例: $t=new Test();$t1=clone $t;13. __autoload()
オブジェクトをインスタンス化する際、対応するクラスが存在しない場合、このメソッドが呼び出されます。


これら 3 つはオペレーター トリガーです。

1 つは新しいオペレーターです。 1 つはクローン オペレーターです。

4階 バルド 2011-04-18

8. __sleep() はシリアル化の前に呼び出されます。オブジェクトが比較的大きく、シリアル化する前にいくつかのものを削除したい場合は、この関数を検討できます。
9. __wakeup()
は、シリアル化解除時に呼び出され、オブジェクトの初期化作業を実行します。

。 __sleep()
削除に限定されません。 __call 関数を使用するクラスの場合、__sleep() を使用しないとシリアル化を完了できません。



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

See all articles