php_PHP チュートリアルの一般的なマジック メソッドの概要

WBOY
リリース: 2016-07-21 15:00:11
オリジナル
800 人が閲覧しました

一般的に使用されるマジック メソッドは次のとおりです: __Tostring () __Call() __autoLoad() __ clone() __GET() __SET() __isset() __unset()

1.__Tostring() 出力オブジェクト参照の定義に使用されます。一部のオブジェクトに関する情報を出力するためによく使用されますが、戻り値が必要です
例: 永続化クラスがあります
Persion per =new persion()
Echo per; //直接呼び出しではエラーが発生します
定義に __tostring() を追加できます。クラス Method

コードをコピー コードは次のとおりです:

Function __Tostring()
{
$str=this->$name.this->age;
Return $str;
}

2 .__clone() object copy
参照割り当て
$per1=$per2; そして、これはメモリ内のアドレスを1つだけ持ちます
そして$per1=clone $per2 この時点でメモリアドレスは2つあります

3.__call()メソッド クラスインスタンスに存在しない関数を呼び出す際に自動的に実行されます
クラスインスタンスに存在しない関数を呼び出そうとすると、フレンドリを提供するために構文エラーが発生します。プロンプト
クラスで Call() メソッドを宣言できます
コードをコピーします コードは次のとおりです:

Function __call($funName,$argu)
{
Echo " .$funName." パラメータ ".printf($argh)." は存在しません",
}

4.__autoLoad は、参照先のページにこの関数が自動的に追加されます
ページ内で他の php ファイルを呼び出す必要がある場合は、 include メソッドを使用する必要があります
しかし、複数の Ten ページを参照する必要がある場合は、これで autoload メソッドを使用できます。ページ
コードをコピーします コードは次のとおりです:

Function __autoload($className)
{
Include $className.".php ";
}

このようにして、他のクラスがどこにあっても参照すると、クラスファイルが自動的に参照されます。前提となるクラスファイル名はクラス名.phpである必要があります。

5.__GET() クラス内のプライベート属性へのアクセス
クラス内の属性がプライベート属性に設定されている場合、クラスのインスタンスではアクセスできませんが、どうすればアクセスできるでしょうか?
__GET() を使用できます
例:
クラスには

コピーコードがあります コードは次のとおりです:

クラス person
{
Private $name;
Private $age;
}

Instantiate person per=new person()
Per->$name; //この方法では値を取得できません
しかし、__GET メソッドをクラスに追加すると
コードをコピーします次のように:

Function __GET($proName)
{
Return this->$proName;
}

Per->$name を再度呼び出すことでアクセスできます
質問する人もいますので、プライベート変数とパブリックとして宣言された変数の違いは何ですか?
public宣言されている場合は任意に読み込むことができ、privateであればgetメソッドを追加するとprivate属性が呼び出されるたびにGETメソッドの内容が呼び出されるようにするため、論理的な処理を追加することができます。 getメソッドに。

6.__SET() はクラスにプライベート属性を設定します
原理は上記と同じで、クラス インスタンスを呼び出すことでプライベート属性に値が割り当てられるたびに、クラスに __SET() 関数を追加できます。 __SET関数が実行されます。 関数プロトタイプ:

コードをコピーします。 コードは次のとおりです。
関数__SET($proName,$value)
{
This->$proName=$value;
}


メソッドの代入なので、論理的な処理ができます

7.__isset()は、クラス内のプライベート属性やメソッドが存在するかどうかを判断するときに自動的に呼び出されます

まず、issetメソッドを紹介します。このメソッドは、属性やメソッドが存在するかどうかを判断するために使用されますが、実際には存在するかどうかを判断することはできません。クラス内のプロパティとメソッドは存在しますか? isset(per->$name);// 戻り値は false ですが、$name 属性は存在しますか?

解決策:

1. $name をプライベートプロパティとして定義します
2.


コードをクラス定義にコピーします

コードは次のとおりです: Function __isset($proName ){
Return isset(this->$proName);//プライベートプロパティはクラス内でアクセス可能
}


この場合、isset($name) を再度呼び出します。戻り値は true になります。

8.__unset() は、クラス内のプライベート変数をクリアするときに自動的に呼び出されます
unset() メソッドと組み合わせると、クラス内の属性を削除する必要がある場合、それがパブリック属性の場合、属性を削除できます。直接削除することもできますが、プライベートの場合は、このメソッドだけでは実現できません
__unset() メソッドを使用して、この関数をクラスに追加する必要があります


コードをコピーします コードは次のとおりです:
Function __unset($proName)
{
Unset(this->$proName);
}


ここで unset($name) を呼び出して削除します。 personクラスのプライベート属性$name


http://www.bkjia.com/PHPjc/328095.html

tru​​ehttp://www.bkjia.com/PHPjc/328095.html技術記事一般的に使用されるマジック メソッドは次のとおりです。 __Tostring () __Call() __autoLoad() __clone() __GET() __SET() __isset() __unset() 1.__Tostring() は、出力オブジェクト参照を定義するときに呼び出すために使用され、多くの場合、印刷します... .
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート