PHP の魔法のメソッドを 5 分で理解できます (詳細な例)
前回の記事では、「PHP での clone キーワードと __clone() メソッドの使用法 (詳細な例)」をご紹介し、PHP キーワードと __clone() での clone について詳しく説明しました。メソッドについては、この記事で引き続き PHP の魔法のメソッドをお届けします。お役に立てば幸いです。
前回の記事で、__clone() メソッドを紹介したときに、これは一種の魔法のメソッドであると述べました。 「コンストラクタとデストラクタ」でも挙げたコンストラクタとデストラクタは、コンストラクタ、デストラクタとも呼ばれ、マジックメソッドの一種でもあります。では、魔法のメソッドとは何でしょうか?一般的に使用される方法は何ですか?どのように使用されますか?次に見てみましょう。
__clone\
__construct\
__destruct 共通点が 1 つ見つかります。それは、すべて 2 つのアンダースコア
__ で始まるということです。そしてそれらはすべて、特定の条件下で自動的に呼び出されます。
#__set()<strong><span style="font-size: 18px;"></span></strong>
メソッド ##__set()
__set() メソッドを呼び出すための特定の条件です。
構文形式は次のとおりです。
public function __set(要操作的变量, 要操作变量的值){ ... ... ; }
<?php class father{ public $study1; private $study2; public function __set($key, $value){ echo '为“'.$key.'”赋值“'.$value.'”失败!<br>'; } } $object = new father(); $object -> study1 = '好好学习'; $object -> study2 = '天天向上'; $object -> study3 = '福如东海'; ?>
出力結果:
<strong><span style="max-width:90%"></span>メソッド</strong>
自動 __get()
メソッドを呼び出すための特定の条件は、現在の環境で未定義または非表示のクラス属性を呼び出すか取得するときです。このメソッドを定義するための構文形式は次のとおりです:
public function __get($name){ ... ... ; }
パラメータ $ name は、操作対象の変数の名前を表します。__get() メソッドの使い方を例で見てみましょう。例は次のとおりです。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><?php
class father{
public $study = &#39;好好学习&#39;;
private $study1 = &#39;天天向上&#39;;
public function __get($study1){
echo &#39;获取:“&#39;.$study1.&#39;”失败!&#39;;
}
}
$object = new father();
echo $object -> study.&#39;<br>&#39;;
echo $object -> study1.&#39;<br>&#39;;
echo $object -> study2.&#39;<br>&#39;;
?></pre><div class="contentsignin">ログイン後にコピー</div></div>
出力結果:
#上記の結果から、現在の環境で未定義または非表示のクラス属性を呼び出したり取得したりするときに、__get() メソッドが自動的に呼び出されることがわかります。
__isset()
<strong><span style="max-width:90%"> メソッド </span></strong>
__isset を自動的に呼び出す() メソッドの特定の条件は、アクセスできない属性またはクラス内に存在しない属性に対して isset() または empty()
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>public function __isset($name){
... ... ;
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
注意する必要があるのは次のとおりです。 パラメータ $name は、アクセスする属性の名前です。
isset()
この関数は、変数が存在するかどうかを確認するために使用され、変数が NULL でないかどうかも判断します。入力された変数が存在する場合は、true が返されます。そうでない場合は true が返され、存在する場合は false が返されます。
この関数は、変数が空かどうかを確認するために使用されます。変数の値が FALSE に等しい場合、その変数は考慮されます。存在しないこと。empty()
isset() 関数または empty() 関数を使用してクラス内のプライベート プロパティを検出する場合は、クラスに __isset() メソッドを追加するだけです。 isset() または empty() 関数がクラス外で使用されると、クラス内の __isset() メソッドが自動的に呼び出されます。
- 次に、例を通して __isset() メソッドの使用法を見てみましょう。例は次のとおりです。
<?php class father{ public $study = '好好学习'; private $name = '天天向上'; public function __isset($name){ if(property_exists('Website', $name)){ echo '成员属性:“'.$name.'”存在!<br>'; }else{ echo '成员属性:“'.$name.'”不存在!<br>'; } } } $object = new father(); isset($object -> mother); isset($object -> name); ?>
ログイン後にコピー出力結果:
注意する必要があるのは、
関数を使用して、プロパティが構文形式は
property_exists($class_name,$property_name)
__unset()
<strong><span style="max-width:90%">メソッド</span></strong>
自動呼び出し__unset() このメソッドの特定の条件は、アクセスできないプロパティまたはクラスに存在しないプロパティに対してクラスの外で unset() 関数が使用される場合です。このメソッドの構文形式は次のとおりです:
public function __unset($name){ ... ... ; }
其中我们需要注意的是:
参数 $name 为要访问的属性名称。
unset() 函数的作用是删除指定的变量,需要传入一个或多个变量作为参数,另外,该函数没有返回值。
可以使用 unset() 函数在类外部去删除类中的成员属性。如果要删除类中的公有属性的话直接使用 unset() 函数即可;
如果要删除类中的私有属性的话,则需要在类中添加一个 __unset() 方法。
接下来我们通过实例来看一下__unset()方法的使用,实例如下:
<?php class father{ public $name = 'http://c.biancheng.net/php/'; private $study = 'C语言中文网'; public function __unset($study){ if(property_exists('father', $study)){ unset($this->$study); echo '移除成员属性:“'.$study.'”成功!<br>'; }else{ echo '成员属性:“'.$study.'”不存在!<br>'; } } } $object = new father(); unset($object->name); unset($object->study); unset($object->study1); ?>
输出结果:
由上述实例看出当在类外部对类中不可访问或不存在的属性使用 unset() 函数时,__unset() 方法会被自动调用。
上述实例中给大家介绍了一些常用的魔术方法,但这并不是魔术方法的全部,那接下来再给大家列举一些魔术方法:
__call()
--- 调用一个不存在的方法时自动调用__sleep()
--- 使用 serialize 序列化时自动调用__toString()
--- 把对象转换成字符串时自动调用__invoke()
--- 当尝试把对象当方法调用时自动调用__wakeup()
--- 使用 unserialize 反序列化时自动调用__callStatic()
--- 调用一个不存在的静态方法时自动调用__debugInfo()
--- 使用 var_dump() 打印对象信息时自动调用__set_state()
--- 当使用 var_export() 函数时自动调用,接受一个数组参数
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
以上がPHP の魔法のメソッドを 5 分で理解できます (詳細な例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

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

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

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

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