PHPでパラメータを動的に渡すにはどうすればよいですか?
最初にコードを投稿すると、コードが合理化されます。
<?php class Cache{ public function get() { $invoker = debug_backtrace(); $invoker_class = $invoker[1]["class"]; $invoker_function = $invoker[1]["function"]."_redirect"; $argus = func_get_args(); $invoker_class = str_replace("Action","", $invoker_class); D($invoker_class)->$invoker_function($argus); }}?>
説明:
プログラムは ThinkPHP で開発されており、その目的は Cache の get メソッドで受け取ったパラメーターを指定されたメソッドに転送することです
最後の行: D メソッドは ThinkPHP に付属しており、シングルトンモード。 $argus パラメータを追加しなくても通常どおり呼び出すことができます。
質問:
次に、get("name","age") などのパラメータを D($invoker_class)->$invoker_function("name","age") に完全に渡したいと考えています。方法? 。
call_user_func が使えそうなのですが、使い方がわかりません。
解決します。
ディスカッションへの返信 (解決策)
call_user_func_array(array(D($invoker_class), $invoker_function), $argus);
call_user_func_array(array(D($invoker_class), $invoker_function) )、$argus ; 。
最終的な完全なコードは次のとおりです: :コードが悪いです、申し訳ありません。 。
CacheModel.class.php キャッシュ モデル ファイル
<?php/** * Cache 模型,在一次HTTP请求生存周期中有效的Cache,一次请求结束,Cache就清除。都在内存中 * 应用场景如下:程序某个地方读取了全部的产品种类名称和id,在另一处也读取了全部的产品种类和id,这样会造成重复数据库查询和变量的空间分配 * 构造缘由:起初准备把Cache分散在每个具体的模型里,发现这样做不好控制.不如集中控制 * @author caoyuanye * */class CacheModel extends Model{ var $cache_arr; /** * * 每个模型的最小化的方法里使用 * @param $pk */ public function get() { $invoker = debug_backtrace(); $invoker_class = $invoker[1]["class"]; $invoker_function = $invoker[1]["function"]; $argus = func_get_args(); $str = $this->caculate($argus); $base_str = md5($str); if($this->cache_arr[$invoker_class][$invoker_function]["key"] == $base_str) { echo "命中cache 没有查询"; //命中cache return $this->cache_arr[$invoker_class][$invoker_function]["value"]; } $new_invoker_class = str_replace("Model","", $invoker_class); $new_invoker_function = $invoker_function."_setCache"; $rs = call_user_func_array(array(D($new_invoker_class), $new_invoker_function), $argus); $this->cache_arr[$invoker_class][$invoker_function]["key"] = $base_str; $this->cache_arr[$invoker_class][$invoker_function]["value"] = $rs; return $rs; } /** * * 递归计算所有的参数,判定参数是否发生改变 */ private function caculate(&$argus) { $str = ""; foreach ($argus as $key => $value) { if(is_array($value)) { $str .= $this->caculate($argus[$key]); }else{ $str .= $value; } } return $str; } }?>
テスト モデル
TestModel.class.php
<?php/** * 测试模型 * @author caoyuanye * */class TestModel extends Model{ var $cache; function __construct() { //D方法单例模式,不用操心 $this->cache = D("Cache"); } public function run($a,$b,$c) { return $this->cache->get($a,$b,$c); } public function run_setCache($a,$b,$c) { return "设定3参数预定值<br />"; } public function run2() { return $this->cache->get(); } public function run2_setCache() { return "设定空预定值<br />"; }}?>
テスト ケース
TestAction.class.php
<?php/** * 测试类,专门用来测试各种类 */class TestAction extends BaseAction{ public function test_function() { $test = D("Test"); echo $test->run("a","b","c"); echo $test->run("a","b","c"); echo $test->run("a","b","c"); $test2 = D("Test"); echo $test2->run("a","b","c"); echo $test2->run2(); echo $test2->run2(); echo $test2->run2(); }}?>
テスト結果:
设定3参数预定值命中cache 没有查询设定3参数预定值命中cache 没有查询设定3参数预定值命中cache 没有查询设定3参数预定值设定空预定值命中cache 没有查询设定空预定值命中cache 没有查询设定空预定值
意図したアイデアを達成し、 , 竹さん、ご回答ありがとうございます。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

Phpoopでは、self ::は現在のクラスを指し、親::は親クラスを指し、静的::は後期静的結合に使用されます。 1.Self ::静的方法と一定の呼び出しに使用されますが、後期静的結合をサポートしていません。 2.Parent ::サブクラスには、親クラスのメソッドを呼び出すために使用され、プライベートメソッドにアクセスできません。 3.Static ::継承と多型に適した後期静的結合をサポートしますが、コードの読みやすさに影響を与える可能性があります。

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。
