一般的に使用されるマジック メソッドは次のとおりです: __Tostring () __Call() __autoLoad() __ clone() __GET() __SET() __isset() __unset()
1.__Tostring() は、出力オブジェクト参照を定義するときに呼び出すために使用されます。これは、一部のオブジェクトに関する情報を出力するためによく使用されます。 戻り値が必要です。
例: person クラスがあります
パージョンあたり =new persion()
Echo per; //直接呼び出すとエラーが発生します
__tostring() メソッドをクラス定義に追加できます
関数 __Tostring()
{
$str=this->$name.this->年齢;
$str;
を返します
}
2. __clone() オブジェクトのコピー
参考課題
$per1=$per2; そして、これはメモリ内にアドレスを 1 つだけ持ちます
そして $per1=clone $per2 この時点でメモリアドレスは 2 つあります
3.クラスインスタンスに存在しない関数を呼び出すと__call()メソッドが自動的に実行される
クラスに存在しない関数を呼び出そうとすると、わかりやすいプロンプトを表示するために構文エラーが発生します
。
クラス内で Call() メソッドを宣言できます;
関数 __call($funName,$argu)
{
エコー「パラメータ「.printf($argh).」を持つ「.$funName.」という名前の関数は存在しません」,
}
4.__autoLoadは使用するクラスファイルを自動で読み込みます
この関数は参照先のページに追加されます。
ページ内の他の php ファイルを呼び出す必要がある場合、私たちは皆、この状況を経験したことがあります
。
ただし、参照する必要があるページが数十ある場合は、ページの自動ロード メソッドを使用できます
。
関数 __autoload($className)
{
$className.".php";
を含めます
}
このように、他のクラスが参照される場合は、必ずクラスファイルが自動的に参照されるようになります。前提となるクラスファイル名は、クラス名.php
である必要があります。
5.__GET() クラス内のプライベート プロパティにアクセスします
クラス内のプロパティがプライベート プロパティとして設定されている場合、そのクラスのインスタンスからはアクセスできませんが、どうすればアクセスできるでしょうか?
__GET() を使用できます
例:
カテゴリに
があります
クラスの人
{
プライベート $name;
プライベート $age;
}
person を =new person() ごとにインスタンス化します
Per->$name; //この方法では値を取得できません
しかし、__GET メソッドをクラスに追加すると
関数__GET($proName)
{
これを返します->$proName;
}
Per->$name を再度呼び出すことでアクセスできます
このようにすると、プライベート変数に直接アクセスできるようになり、パブリックに宣言することと何が違うのかと疑問を持つ人もいるかもしれません。
public と宣言されていれば任意に読み込むことができ、private であれば get メソッドを追加すると、private 属性が呼び出されるたびに GET メソッドの内容が呼び出されるようにするため、論理的な処理を追加できます。 getメソッド。
6.__SET() はクラス www.2cto.com にプライベート属性を設定します
原理は上記と同じです。クラス インスタンスを呼び出すことでプライベート属性に値が割り当てられるたびに、__SET 関数のプロトタイプが実行されます。
関数 __SET($proName,$value)
{
これ->$proName=$value;
}
メソッドの代入なので論理的な処理ができます
7.__isset()は、クラス内のプライベート属性またはメソッドが存在するかどうかを判断するときに自動的に呼び出されます
まず、 isset メソッドを紹介します。このメソッドは、プロパティとメソッドが存在するかどうかを判断するために使用されます。ただし、クラス インスタンスを通じてプライベート プロパティが存在するかどうかを判断することはできません。
isset(per->$name);// 戻り値は false ですが、$name 属性は存在する場合、どうすれば解決できますか?
解決策:
1. $name をプライベート属性として定義します
2.
クラス定義に
を追加
関数 __isset($proName)
{
Return isset(this->$proName);//プライベートプロパティはクラス内でアクセス可能
}
この場合、 isset($name) を再度呼び出します。戻り値は true になります。
8.__unset() はクラス内のプライベート変数をクリアするときに自動的に呼び出されます
unset() と組み合わせると、クラス内の属性を削除する必要がある場合、それがパブリック属性であれば、直接
できます。
削除しますが、非公開の場合はこの方法だけでは削除できません
実装方法は? __unset() メソッドを使用してクラスに追加する必要があります
。
関数 __unset($proName)
{
設定を解除(this->$proName);
}
次に、unset($name) を呼び出して、person クラスのプライベート属性 $name を削除します
jt521xlgさんのコラムより抜粋