検索
ホームページバックエンド開発PHPチュートリアルPHP でチェーン操作を実装する 3 つの方法

PHP には多くの文字列関数があります。たとえば、最初に文字列の末尾のスペースをフィルタリングしてから、その長さを調べる必要があります。チェーンを実装したい場合は、次のように記述します。 jsと同様の操作ですが、例えば以下のように書けばよいでしょうか?

strlen(trim($str))

以下は 3 つの方法で実装されます:

方法 1. マジック関数 __callcall_user_func と組み合わせて使用​​し、

考えを実装します。 最初に文字列クラス StringHelper を定義し、コンストラクターが値を直接割り当ててから、trim() 関数と strlen() 関数を呼び出します。チェーン内で、呼び出されるマジック関数 __call() 内の call_user_func を使用して呼び出し関係を処理することにより、実装は次のようになります:

$str->trim()->strlen()
__call结合call_user_func来实现

思想:首先定义一个字符串类StringHelper,构造函数直接赋值value,然后链式调用trim()strlen()函数,通过在调用的魔法函数__call()中使用call_user_func来处理调用关系,实现如下:

<?php class StringHelper 
{
    private $value;
    
    function __construct($value)
    {
        $this->value = $value;
    }

    function __call($function, $args){
        $this->value = call_user_func($function, $this->value, $args[0]);
        return $this;
    }

    function strlen() {
        return strlen($this->value);
    }
}

$str = new StringHelper("  sd f  0");
echo $str->trim('0')->strlen();

终端执行脚本:

php test.php 
8

方法二、使用魔法函数__call结合call_user_func_array来实现

<?php class StringHelper 
{
    private $value;
    
    function __construct($value)
    {
        $this->value = $value;
    }

    function __call($function, $args){
        array_unshift($args, $this->value);
        $this->value = call_user_func_array($function, $args);
        return $this;
    }

    function strlen() {
        return strlen($this->value);
    }
}

$str = new StringHelper("  sd f  0");
echo $str->trim('0')->strlen();

说明:

array_unshift(array,value1,value2,value3...)

array_unshift() 函数用于向数组插入新元素。新数组的值将被插入到数组的开头。

call_user_func()call_user_func_array都是动态调用函数的方法,区别在于参数的传递方式不同。

方法三、不使用魔法函数__call来实现

只需要修改_call()trim()函数即可:

public function trim($t)
{
    $this->value = trim($this->value, $t);
    return $this;
}

重点在于,返回$this指针,方便调用后者函数。


在php中有很多字符串函数,例如要先过滤字符串收尾的空格,再求出其长度,一般的写法是:

strlen(trim($str))

如果要实现类似js中的链式操作,比如像下面这样应该怎么写?

$str->trim()->strlen()

下面分别用三种方式来实现:

方法一、使用魔法函数__call结合call_user_func来实现

思想:首先定义一个字符串类StringHelper,构造函数直接赋值value,然后链式调用trim()strlen()函数,通过在调用的魔法函数__call()中使用call_user_func来处理调用关系,实现如下:

<?php class StringHelper 
{
    private $value;
    
    function __construct($value)
    {
        $this->value = $value;
    }

    function __call($function, $args){
        $this->value = call_user_func($function, $this->value, $args[0]);
        return $this;
    }

    function strlen() {
        return strlen($this->value);
    }
}

$str = new StringHelper("  sd f  0");
echo $str->trim('0')->strlen();

终端执行脚本:

php test.php 
8

方法二、使用魔法函数__call结合call_user_func_array来实现

<?php class StringHelper 
{
    private $value;
    
    function __construct($value)
    {
        $this->value = $value;
    }

    function __call($function, $args){
        array_unshift($args, $this->value);
        $this->value = call_user_func_array($function, $args);
        return $this;
    }

    function strlen() {
        return strlen($this->value);
    }
}

$str = new StringHelper("  sd f  0");
echo $str->trim('0')->strlen();

说明:

array_unshift(array,value1,value2,value3...)

array_unshift() 函数用于向数组插入新元素。新数组的值将被插入到数组的开头。

call_user_func()call_user_func_array都是动态调用函数的方法,区别在于参数的传递方式不同。

方法三、不使用魔法函数__call来实现

只需要修改_call()trim()ターミナル実行スクリプト:

public function trim($t)
{
    $this->value = trim($this->value, $t);
    return $this;
}

方法 2. マジックを使用する 関数 __call は、call_user_func_arrayrrreee

説明:

rrreee

array_unshift() と組み合わせて実装されます。この関数は、配列に新しい要素を挿入するために使用されます。新しい配列の値は配列の先頭に挿入されます。

call_user_func()call_user_func_array はどちらも関数を動的に呼び出すメソッドであり、違いはパラメーターの受け渡し方法にあります。

方法 3、 の実装にマジック関数 __call を使用しないでください。_call()trim() に変更するだけです。 > 関数。できること: 🎜rrreee🎜 重要な点は、後者の関数の呼び出しを容易にするために $this ポインターを返すことです。 🎜


🎜🎜たとえば、まず文字列の末尾にあるスペースをフィルタリングして、その長さを調べる必要があります。一般的な書き方は🎜rrreee🎜 例えばjsで同様のチェーン操作を実装したい場合、以下のようにどのように書けばよいでしょうか? 🎜rrreee🎜これを実装するには次の 3 つの方法があります: 🎜🎜方法 1. マジック関数 __callcall_user_func と組み合わせて使用​​して実装します。🎜考え:最初に文字列クラス StringHelper を定義し、コンストラクターが値を直接割り当ててから、trim()strlen() を呼び出します。 > チェーン内の関数。呼び出されたマジック関数 __call() 内の call_user_func を使用して呼び出し関係を処理します。実装は次のようになります: 🎜rrreee🎜ターミナル実行スクリプト: 🎜rrreee🎜方法 2. マジックを使用する関数 __call は、call_user_func_arrayrrreee🎜説明: 🎜rrreee🎜array_unshift() と組み合わせて実装されます。 code> この関数は、配列に新しい要素を挿入するために使用されます。新しい配列の値は配列の先頭に挿入されます。 🎜🎜<code>call_user_func()call_user_func_array はどちらも関数を動的に呼び出すメソッドであり、違いはパラメーターの受け渡し方法にあります。 🎜🎜方法 3、 の実装にマジック関数 __call を使用しないでください。_call()trim() に変更するだけです。 > 関数。できること: 🎜rrreee🎜 重要な点は、後者の関数の呼び出しを容易にするために $this ポインターを返すことです。 🎜🎜🎜🎜チェーン操作を実装するための PHP 3 つの方法の詳細については、PHP 中国語 Web サイトの関連記事に注目してください。 🎜🎜🎜

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
セッション固定攻撃をどのように防ぐことができますか?セッション固定攻撃をどのように防ぐことができますか?Apr 28, 2025 am 12:25 AM

セッション固定攻撃を防ぐための効果的な方法には、次のものがあります。1。ユーザーがログインした後にセッションIDを再生します。 2。安全なセッションID生成アルゴリズムを使用します。 3。セッションタイムアウトメカニズムを実装します。 4。HTTPSを使用したセッションデータを暗号化します。これらの措置は、セッションの固定攻撃に直面するときにアプリケーションが破壊されないようにすることができます。

セッションレス認証をどのように実装しますか?セッションレス認証をどのように実装しますか?Apr 28, 2025 am 12:24 AM

セッションのない認証の実装は、サーバー側のセッションストレージなしですべての必要な情報がトークンに保存されるトークンベースの認証システムであるJSonWebtokens(JWT)を使用することで実現できます。 1)JWTを使用してトークンを生成および検証する、2)トークンが傍受されるのを防ぐためにHTTPSが使用されることを確認する、3)クライアント側にトークンを安全に保存する、4)改ざんを防ぐためにサーバー側のトークンを検証する、5)短期アクセスや長期的なリフレイを使用するなどのトークンの取り消しメカニズムを実装する。

PHPセッションに関連するいくつかの一般的なセキュリティリスクは何ですか?PHPセッションに関連するいくつかの一般的なセキュリティリスクは何ですか?Apr 28, 2025 am 12:24 AM

PHPセッションのセキュリティリスクには、主にセッションハイジャック、セッションの固定、セッション予測、およびセッション中毒が含まれます。 1。HTTPSを使用してCookieを保護することにより、セッションハイジャックを防ぐことができます。 2。ユーザーがログインする前にセッションIDを再生することにより、セッションの固定を回避できます。3。セッションの予測は、セッションIDのランダム性と予測不可能性を確保する必要があります。 4.セッションの中毒は、セッションデータを確認およびフィルタリングすることで防ぐことができます。

PHPセッションをどのように破壊しますか?PHPセッションをどのように破壊しますか?Apr 28, 2025 am 12:16 AM

PHPセッションを破壊するには、最初にセッションを開始してから、データをクリアしてセッションファイルを破壊する必要があります。 1。Session_start()を使用してセッションを開始します。 2。Session_unset()を使用して、セッションデータをクリアします。 3.最後に、session_destroy()を使用してセッションファイルを破壊して、データのセキュリティとリソースのリリースを確保します。

PHPのデフォルトセッションの保存パスをどのように変更できますか?PHPのデフォルトセッションの保存パスをどのように変更できますか?Apr 28, 2025 am 12:12 AM

PHPのデフォルトセッションの保存パスを変更する方法は?次の手順で達成できます。Session_save_path( '/var/www/sessions'); session_start(); PHPスクリプトで、セッション保存パスを設定します。 session.save_path = "/var/www/sessions"をphp.iniファイルに設定して、セッションの保存パスをグローバルに変更します。 memcachedまたはredisを使用して、ini_set( 'session.save_handler'、 'memcached')などのセッションデータを保存します。 ini_set(

PHPセッションに保存されているデータをどのように変更しますか?PHPセッションに保存されているデータをどのように変更しますか?Apr 27, 2025 am 12:23 AM

tomodifydatainaphpsession、starthessession withsession_start()、$ _sessiontoset、modify、orremovevariables.1)startthessession.2)

PHPセッションに配列を保存する例を示します。PHPセッションに配列を保存する例を示します。Apr 27, 2025 am 12:20 AM

配列はPHPセッションに保存できます。 1。セッションを開始し、session_start()を使用します。 2。配列を作成し、$ _Sessionで保存します。 3. $ _Sessionを介して配列を取得します。 4.セッションデータを最適化してパフォーマンスを向上させます。

Garbage CollectionはPHPセッションでどのように機能しますか?Garbage CollectionはPHPセッションでどのように機能しますか?Apr 27, 2025 am 12:19 AM

PHPセッションガベージコレクションは、有効期限が切れたセッションデータをクリーンアップするために確率メカニズムを通じてトリガーされます。 1)構成ファイルにトリガー確率とセッションのライフサイクルを設定します。 2)Cronタスクを使用して、高負荷アプリケーションを最適化できます。 3)データの損失を避けるために、ごみ収集の頻度とパフォーマンスのバランスを取る必要があります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

SublimeText3 英語版

SublimeText3 英語版

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

MantisBT

MantisBT

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

DVWA

DVWA

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

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。