php のマジック メソッドには、「__set()」、「__get()」、「__isset()」、「__unset()」、「__sleep()」、「__wakeup()」、「__call( )」、「__invoke()」、「__set_state()」など。
このチュートリアルの動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター
オブジェクト指向プログラミングでは、PHP が提供します。一連のマジック メソッド。これらのマジック メソッドはプログラミングに非常に便利であり、PHP におけるその役割は非常に重要です。 PHP のマジック メソッドは通常、__ (2 つのアンダースコア) で始まり、明示的に呼び出す必要はありませんが、特定の条件下で自動的に呼び出されます。
PHP のマジック メソッドは次の表に示されています。
マジック メソッド | Function |
---|---|
__construct() | クラスのインスタンス化時に自動的に呼び出されます |
__destruct() | クラス オブジェクトの使用が終了したときに自動的に呼び出されます |
#set() | 未定義のプロパティに値を割り当てるときに自動的に呼び出されます |
未定義と呼ばれる | |
isset() または empty() 関数を使用すると自動的に呼び出されます | |
#__sleep() | |
__wakeup() | |
__call() | |
#__callStatic() | |
__toString() | |
__invoke() | |
__set_state() | |
__clone() | |
__debugInfo() | |
__autoload() | |
未定義のクラスをロードしようとしました |
例これらの魔法のメソッドの使用方法を例の形で説明しましょう。 1. __construct()、クラスのコンストラクター関数php のコンストラクター メソッドは、オブジェクトの作成後にオブジェクトによって自動的に呼び出される最初のメソッドです。すべてのクラスにはコンストラクターがありますが、明示的に宣言されていない場合、デフォルトでクラス内にパラメーターがなく空のコンテンツを持つコンストラクターが存在します。 1. コンストラクターの役割 通常、コンストラクターは、オブジェクトの作成時にメンバー プロパティに初期値を割り当てるなど、いくつかの便利な初期化タスクを実行するために使用されます。 2. クラスでのコンストラクター メソッドの宣言形式 function __constrct([参数列表]){ 方法体 //通常用来对成员属性进行初始化赋值 } 3. クラスでコンストラクター メソッドを宣言する際の注意事項
<?php class Person { public $name; public $age; public $sex; /** * 显示声明一个构造方法且带参数 */ public function __construct($name="", $sex="男", $age=22) { $this->name = $name; $this->sex = $sex; $this->age = $age; } /** * say 方法 */ public function say() { echo "我叫:" . $this->name . ",性别:" . $this->sex . ",年龄:" . $this->age; } }パラメータを指定せずにオブジェクト $person1 を作成します $Person1 = new Person(); echo $Person1->say(); //输出:我叫:,性别:男,年龄:27パラメータ「Xiao Ming」を使用してオブジェクト $person2 を作成します $Person2 = new Person("小明"); echo $Person2->say(); //输出:我叫:张三,性别:男,年龄:273 つのパラメータを使用してオブジェクト $person3 を作成します $Person3 = new Person("李四","男",25); echo $Person3->say(); //输出:我叫:李四,性别:男,年龄:25 2 . __destruct()、クラス デストラクター上記の説明を通じて、コンストラクターが何であるかがすでにわかりました。次に、構築メソッドに相当するのがデストラクター メソッドです。 デストラクター メソッドを使用すると、クラスを破棄する前に、ファイルを閉じる、結果セットを解放するなど、一部の操作を実行したり、一部の機能を完了したりできます。 デストラクター メソッドは、PHP5 で導入された新しい内容です。 デストラクター メソッドの宣言形式は、構築メソッド__construct() function __destruct() { //方法体 }注意: デストラクタにはパラメータを含めることはできません。 2. デストラクター メソッドの役割 一般来说,析构方法在PHP中并不是很常用,它属类中可选择的一部分,通常用来完成一些在对象销毁前的清理任务。例を以下に示します: <?php class Person{ public $name; public $age; public $sex; public function __construct($name="", $sex="男", $age=22) { $this->name = $name; $this->sex = $sex; $this->age = $age; } /** * say 说话方法 */ public function say() { echo "我叫:".$this->name.",性别:".$this->sex.",年龄:".$this->age; } /** * 声明一个析构方法 */ public function __destruct() { echo "我觉得我还可以再抢救一下,我的名字叫".$this->name; } } $Person = new Person("小明"); unset($Person); //销毁上面创建的对象$Person実行時の上記のプログラム出力: 我觉得我还可以再抢救一下,我的名字叫小明# #Three 、 __call() は、オブジェクト内でアクセスできないメソッドが呼び出されたときに呼び出されます。 このメソッドには 2 つのパラメータがあります。最初のパラメータ$function_name は自動的に存在しないメソッド名を受け取り、2 番目の function __call(string $function_name, array $arguments) { // 方法体 } 2. __call() メソッドの機能: 为了避免当调用的方法不存在时产生错误,而意外的导致程序中止,可以使用 __call() 方法来避免。 该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去。 次のコードを参照してください: <?php class Person { function say() { echo "Hello, world!<br>"; } /** * 声明此方法用来处理调用对象中不存在的方法 */ function __call($funName, $arguments) { echo "你所调用的函数:" . $funName . "(参数:" ; // 输出调用不存在的方法名 print_r($arguments); // 输出调用不存在的方法时的参数列表 echo ")不存在!<br>\n"; // 结束换行 } } $Person = new Person(); $Person->run("teacher"); // 调用对象中不存在的方法,则自动调用了对象中的__call()方法 $Person->eat("小明", "苹果"); $Person->say(); 実行結果: 你所调用的函数:run(参数:Array ( [0] => teacher ) )不存在! 你所调用的函数:eat(参数:Array ( [0] => 小明 [1] => 苹果 ) )不存在! Hello, world!4. __callStatic()、静的モードでアクセスできないメソッドを呼び出すときに呼び出されます このメソッドは、上記の __call() 静的メソッド用に __callStatic() が用意されていない点を除けば、機能は同じです。次のコードを見てください: <?php class Person { function say() { echo "Hello, world!<br>"; } /** * 声明此方法用来处理调用对象中不存在的方法 */ public static function __callStatic($funName, $arguments) { echo "你所调用的静态方法:" . $funName . "(参数:" ; // 输出调用不存在的方法名 print_r($arguments); // 输出调用不存在的方法时的参数列表 echo ")不存在!<br>\n"; // 结束换行 } } $Person = new Person(); $Person::run("teacher"); // 调用对象中不存在的方法,则自动调用了对象中的__call()方法 $Person::eat("小明", "苹果"); $Person->say(); 実行結果は次のとおりです: 你所调用的静态方法:run(参数:Array ( [0] => teacher ) )不存在! 你所调用的静态方法:eat(参数:Array ( [0] => 小明 [1] => 苹果 ) )不存在! Hello, world!5. __get()、メンバー変数を取得するときに呼び出されます。クラス PHP オブジェクト指向プログラミングでは、クラスのメンバー属性がprivate に設定された後、それを外部から呼び出そうとすると、「クラスにアクセスできません」というエラーが発生します。プライベート属性」が表示されます。したがって、この問題を解決するには、魔法のメソッド
姓名:小明 年龄:506. クラスのメンバー変数を設定するときに呼び出される __set()
次のデモ コードを参照してください: <?php class Person { private $name; private $age; public function __construct($name="", $age=25) { $this->name = $name; $this->age = $age; } /** * 声明魔术方法需要两个参数,真接为私有属性赋值时自动调用,并可以屏蔽一些非法赋值 * @param $property * @param $value */ public function __set($property, $value) { if ($property=="age") { if ($value > 150 || $value < 0) { return; } } $this->$property = $value; } /** * 在类中声明说话的方法,将所有的私有属性说出 */ public function say(){ echo "我叫".$this->name.",今年".$this->age."岁了"; } } $Person=new Person("小明", 25); //注意,初始值将被下面所改变 //自动调用了__set()函数,将属性名name传给第一个参数,将属性值”李四”传给第二个参数 $Person->name = "小红"; //赋值成功。如果没有__set(),则出错。 //自动调用了__set()函数,将属性名age传给第一个参数,将属性值26传给第二个参数 $Person->age = 16; //赋值成功 $Person->age = 160; //160是一个非法值,赋值失效 $Person->say(); //输出:我叫小红,今年16岁了 実行結果: 我叫小红,今年16岁了7. __isset()、 isset() を呼び出すとき、またはアクセスできないプロパティで空を呼び出した場合 ( ) は と呼ばれます。このメソッドを説明する前に、isset() 関数のアプリケーションを見てみましょう。この関数は変数をパラメータとして渡し、渡された変数が存在する場合は true を返し、それ以外の場合は false を返します。 状況は 2 つあります。オブジェクト内のメンバーがパブリックである場合、この関数を使用してメンバー属性を測定できます。メンバーがプライベートなメンバー属性である場合、この関数は機能しません。その理由は、オブジェクト内のメンバーがパブリックである場合、この関数は機能しません。 private. カプセル化されており、外部からは見えません。では、オブジェクトの外部で メソッドを追加することだけです。クラス外で
|
以上がphpの魔法のメソッドとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、酸とベースのデータベースモデルを比較し、その特性と適切なユースケースを詳述しています。酸は、財務およびeコマースアプリケーションに適したデータの整合性と一貫性を優先し、ベースは可用性に焦点を当て、

この記事では、コードインジェクションのような脆弱性を防ぐために、PHPファイルのアップロードを確保することについて説明します。ファイルタイプの検証、セキュアストレージ、およびアプリケーションセキュリティを強化するエラー処理に焦点を当てています。

記事では、組み込み関数、ホワイトリストアプローチ、サーバー側の検証などの手法に焦点を当てたセキュリティを強化するためのPHP入力検証のベストプラクティスについて説明します。

この記事では、Token BucketやLeaky BucketなどのアルゴリズムやSymfony/Rate-Limiterなどのライブラリを使用するなど、PHPでAPIレート制限を実装するための戦略について説明します。また、監視、動的に調整されたレートの制限、および手をカバーします

この記事では、パスワードを保護するためにPHPでpassword_hashとpassword_verifyを使用することの利点について説明します。主な議論は、これらの関数が自動塩の生成、強力なハッシュアルゴリズム、およびSecurを通じてパスワード保護を強化するということです

この記事では、PHPおよび緩和戦略におけるOWASPトップ10の脆弱性について説明します。重要な問題には、PHPアプリケーションを監視および保護するための推奨ツールを備えたインジェクション、認証の壊れ、XSSが含まれます。

この記事では、PHPでのXSS攻撃を防ぐための戦略について説明し、入力の消毒、出力エンコード、セキュリティを向上させるライブラリとフレームワークの使用に焦点を当てています。

この記事では、PHPでのインターフェイスと抽象クラスの使用について説明し、それぞれをいつ使用するかに焦点を当てています。インターフェイスは、無関係なクラスや複数の継承に適した、実装なしで契約を定義します。抽象クラスは共通の機能を提供します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
