最近、「php Core Technology and Best Practices」という本を読んでいます。この本の最初の章では、__call() メソッドを使用して単純な文字列チェーン操作を実装できると述べています。たとえば、次の例では文字列をフィルター処理します。長さの演算は一般的に次のように記述されます:
strlen(trim($str));
それでは、次の記述は実現できるでしょうか?
$str->trim()->strlen();
今すぐ試してみましょう。
チェーン操作は、率直に言えば、実際にはオブジェクトを呼び出すメソッドのチェーンです。文字列チェーン操作を実装する必要があるため、文字列クラスを実装してから、このクラスのオブジェクトを呼び出す必要があります。 String クラスに対する私の期待は次のとおりです。(1) オブジェクトを作成するときに、文字列をオブジェクトのプロパティに割り当てることができ、このプロパティにアクセスして値を読み取ることができます。(2) trim( を呼び出すことができます。 ) と strlen( ) メソッド; (3) このように $str->trim()->strlen() メソッドを呼び出すこともできます。
上記の項目 (1) は、文字列クラスの基本的な要件です。最初にこれを実装します:
class String { public $value; public function __construct($str=null) { $this->value = $str; } }
次のことを試すことができます:
1 $str = new String('01389');
2 echo $str->value;
次に項目 2 を見て、最初に実装します。 $str->trim() については、本書のアイデアを参照してください。__call メソッドをトリガーしてから call_user_func を実行します。コードは次のとおりです:
class String { public $value; public function __construct($str=null) { $this->value = $str; } public function __call($name, $args) { $this->value = call_user_func($name, $this->value, $args[0]); return $this; } }
テスト済み:
1 $str = new String('01389');
2 echo $str->trim('0')->value;
結果
上記で注意する必要があるのは 12 行目です: $this->value = call_user_func($name, $this->value, $args[0]);コールバック関数 (つまり、ここでは trim) の最後の 2 つはコールバック関数 (tim) のパラメーターであり、パラメーターの順序は逆になりません。 $args は配列なので注意が必要です。
Strlen() も記事 2 で実装する必要があります。現時点では、上記のコードの 13 行目が非常に重要です: return $this; その機能は、12 行目で Trim() を呼び出して文字列を処理し、再度実行することです。 value 属性に値が割り当てられ、現在のオブジェクトへの参照が返されるため、オブジェクト内の他のメソッドが属性値に対して連続操作を実行できるため、連鎖操作が実現します。 $str->strlen() は次のように実装されます:
class String { public $value; public function __construct($str=null) { $this->value = $str; } public function __call($name, $args) { $this->value = call_user_func($name, $this->value, $args[0]); return $this; } public function strlen() { return strlen($this->value); } }
テスト済み:
1 $str = new String('01389');
2 echo $str->strlen();
結果:
チェーン操作:
echo $str->trim('0')->strlen();
結果:
class String { public $value; public function __construct($str=null) { $this->value = $str; } public function trim($t) { $this->value = trim($this->value, $t); return $this; } public function strlen() { return strlen($this->value); } }
チェーン操作の鍵は操作を完了することです最後に $this を返します。
さらに、この記事は庭のこの記事に触発され、call_user_func() の実装を call_user_func_array() に置き換え、__call() メソッドを次のように変更しています。
public function __call($name, $args) { array_unshift($args, $this->value); $this->value = call_user_func_array($name, $args); return $this; }
効果は上記の __call() メソッドと同じなので、コードは前の実装よりも洗練されているように見えます。
概要:
__call() は、オブジェクトがアクセスできないメソッドを呼び出すときにトリガーされるため、クラスの動的メソッドの作成を実現し、PHP のメソッドのオーバーロード機能を実現できますが、実際には糖衣構文 (__construct) ( ) 方式も同様です)。
では、__call() のような糖衣構文がなければ、動的メソッドやチェーン操作の作成は実現できるでしょうか?これには、クラスメソッドが存在し、呼び出せるかどうかが含まれると思います。これは、method_exists、is_callable、get_class_methods などのメソッドを使用して実現できます。また、オブジェクトの作成時に属性に値を割り当てる (初期化) ことも含まれます。構文シュガーは確かに便利ですが、必須ではありません。時間があるときにもう一度勉強しましょう。

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

PHPセッションは、アプリケーションのパフォーマンスに大きな影響を与えます。最適化方法には以下が含まれます。1。データベースを使用してセッションデータを保存して応答速度を向上させます。 2。セッションデータの使用を削減し、必要な情報のみを保存します。 3.非ブロッキングセッションプロセッサを使用して、同時実行機能を改善します。 4.セッションの有効期限を調整して、ユーザーエクスペリエンスとサーバーの負担のバランスを取ります。 5.永続的なセッションを使用して、データの読み取り時間と書き込み時間を減らします。

phpsesionsareserver-side、whilecookiesareclient-side.1)Sessionsionsionsoredataontheserver、aremoresecure.2)cookiesstoredataontheclient、cookiestoresecure、andlimitedinsizeisize.sesionsionsionivationivationivationivationivationivationivationivate

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

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

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









