前回の記事では、「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 が返されます。empty()
isset() 関数または empty() 関数を使用してクラス内のプライベート プロパティを検出する場合は、クラスに __isset() メソッドを追加するだけです。 isset() または empty() 関数がクラス外で使用されると、クラス内の __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 サイトの他の関連記事を参照してください。