PHP のオーバーロードは他のオブジェクト指向 (C#、Java) 言語とは異なります。たとえば、C# のオーバーロードはメソッド名は同じですが、仮パラメーター リスト (つまり、数値、型、および配列が異なります) 関数が異なります。呼び出し時の仮パラメータリストに基づいて、どのメソッドを呼び出すかが決定されます。
PHP でのオーバーロードは、現在のオブジェクトのアクセスできないメンバー (定義されていない、または定義されているがアクセスできない) を処理するためのものです:
<?php Class Student{ private $_age; } $o1=new Student(); $o1->_name="Li"; var_dump($o1); echo "<br/>"; $o1->_age=24; var_dump($o1); ?>
この結果から、存在しないメンバー $_name にアクセスする場合、メンバーはパブリック属性としてオブジェクトに追加されます。アクセス許可の問題になると、エラーが報告されます。
この状況に対して、PHP で属性のオーバーロードを行うための魔法のメソッドがいくつかあります。
属性のオーバーロード
1.__set($name,$value): 呼び出された特定の 属性がアクセスできない場合(存在しない / アクセスが制限されている) )、システムは対応するクラスの __set() 関数を自動的に呼び出します。 $name は呼び出される属性名を表し、$value は操作中に渡される値を表します。
属性が存在しない場合:
<?php Class Student{ private $_age; function __set($name,$value){ } } $o1=new Student(); $o1->_name="Li"; var_dump($o1);
ここで、上記の例にいくつかの変更を加えます: $o1->_name= の実行時に Student クラスに __set() メソッドを追加します。 Li ";このコードは自動的に __set() メソッドを呼び出します。コードが含まれていないため、デフォルトの状況と同じ割り当てを実現することは不可能です。そのため、表示される $o1 オブジェクトにはプライベート プロパティ $_age が 1 つだけあります。
このコードを __set() に記述することもできます。メソッド:
function __set($name,$value){ $this->$name=$value; }
この時点での結果は
属性が存在するがアクセスできない場合:
<?php header("Content-Type:text/html;charset=utf-8"); Class Student{ private $_age; function __set($name,$value){ //进入该函数表示$name 这个属性不可访问。 if(property_exists($this,$name)){ //property_exists()函数判断当前对象($this)中是否存在$name属性。 trigger_error("属性不可访问!",E_USER_ERROR); }else{ } } } $o1=new Student(); $o1->_age=2; var_dump($o1);
2.__get(): はアクセスできないものにアクセスするとトリガーされますメンバー:
<?php header("Content-Type:text/html;charset=utf-8"); Class Student{ private $_age=23; function __get($name){ //进入该函数表示$name 这个属性不可访问。 return $this->$name; } } $o1=new Student(); echo $o1->_age; echo "<br/>"; var_dump($o1);
3.__unset(): この関数は、変数が削除されたときにトリガーされます。
その具体的なアプリケーション シナリオ: 特定の変数を削除する unset() 関数はよく知られています。たとえば、上記の例では、$_age が public の場合、unset() を使用できます。 $o1 ->_age); ただし、ここでの $_age はプライベート属性であり、現時点では unset() を使用してアクセスできません。
<?php header("Content-Type:text/html;charset=utf-8"); Class Student{ private $_age=23; } $o1=new Student(); unset($o1->_age);
これには、クラス内の属性の削除を実装する __unset() マジック メソッドが必要です:
<?php header("Content-Type:text/html;charset=utf-8"); Class Student{ private $_age=23; function __get($name){ return $this->$name;//正常应该有判断语句,这里省略了。 } function __unset($name){ unset($this->$name); } } $o1=new Student(); echo $o1->_age; unset($o1->_age); echo $o1->_age;
特定のアプリケーションは、上記の __set() および __get() に似ています。 unset(変数名);すると__unset()メソッドが自動的に呼び出され、メソッド本体は自分で定義できます。
4.__isset(): __unset()と同様、主に属性の有無を判定するために使用されます。外部が属性の有無を判断したい場合、 isset() 関数を使用してプライベート変数にアクセスすることはできません。この場合、 __isset() メソッドを使用して定義できます。
オーバーロードされたメソッド
メソッドのオーバーロードと属性のオーバーロードの条件は同じです。存在しないメソッド、またはアクセスできないメソッドを呼び出す場合、__call() メソッドと Static__callStatic() メソッドが呼び出されます。
システムにデフォルトで存在しないメソッドを呼び出すと:
<?php header("Content-Type:text/html;charset=utf-8"); Class Student{ public static $a=1; private $_age=23; } $o1=new Student(); $o1->getName();//当调用本不存在的方法时。
システムで重大なエラーが発生します。
__call(): オブジェクトを使って呼び出す場合に使用するマジックメソッド
<?php header("Content-Type:text/html;charset=utf-8"); Class Student{ public static $a=1; private $_age=23; function __call($name,$arr){ //$name表示传入的方法名,$arr表示传入的方法列表(是一个数组)。 trigger_error("不存在该函数",E_USER_NOTICE);//直接报错 //也可以在此重写函数。 } } $o1=new Student(); $o1->getName();//当调用本不存在的方法时。
Static__callStatic(): クラスの呼び出しメソッドを使用する場合、つまり存在しない静的メソッドを呼び出す場合にこのマジックメソッドが使用できます。
関連する推奨事項:
以上がPHPのオーバーロードについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

負荷分散はセッション管理に影響しますが、セッションの複製、セッションの粘着性、集中セッションストレージで解決できます。 1。セッションレプリケーションサーバー間のセッションデータをコピーします。 2。セッションスティンネスは、ユーザーリクエストを同じサーバーに指示します。 3.集中セッションストレージは、Redisなどの独立したサーバーを使用してセッションデータを保存してデータ共有を確保します。

SESSIONLOCKINGISATECHNIQUESTOESUREAUSER'SSESSIONREMAINSEXCLUSIVETOONEUSATIME.ITISCRUCIALFORPREVENTINGDATACORTIONANDSECURITYBREACHESINMULTI-USERAPPLICATIONS.SESSIONLOCKINGISISIMPLEMENTEDUSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGROCKINGSMECHANISMなど

PHPセッションの代替品には、Cookie、トークンベースの認証、データベースベースのセッション、Redis/Memcachedが含まれます。 1.Cookiesは、クライアントにデータを保存することによりセッションを管理します。 2.トークンベースの認証はトークンを使用してユーザーを検証します。これは非常に安全ですが、追加のロジックが必要です。 3.Databaseベースのセッションは、データベースにデータを保存します。これは、スケーラビリティが良好ですが、パフォーマンスに影響を与える可能性があります。 4. Redis/Memcachedは分散キャッシュを使用してパフォーマンスとスケーラビリティを向上させますが、追加のマッチングが必要です

SessionHijackingとは、ユーザーのSessionIDを取得してユーザーになりすましている攻撃者を指します。予防方法には、次のものが含まれます。1)HTTPSを使用した通信の暗号化。 2)SessionIDのソースの検証。 3)安全なSessionID生成アルゴリズムの使用。 4)SessionIDを定期的に更新します。

この記事では、PHPについて説明し、その完全なフォーム、Web開発での主要な使用、PythonとJavaとの比較、および初心者の学習のしやすさについて説明します。

PHPは、$ \ _ postおよび$ \ _を使用してフォームデータを処理し、検証、消毒、安全なデータベースインタラクションを通じてセキュリティを確保します。

この記事では、PHPとASP.NETを比較して、大規模なWebアプリケーション、パフォーマンスの違い、セキュリティ機能への適合性に焦点を当てています。どちらも大規模なプロジェクトでは実行可能ですが、PHPはオープンソースであり、プラットフォームに依存しませんが、ASP.NET、

PHPの症例感度は変化します:関数は鈍感であり、変数とクラスは感度があります。ベストプラクティスには、一貫した命名と、比較のためにケース非感受性関数を使用することが含まれます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ホットトピック









