ホームページ >バックエンド開発 >PHPチュートリアル >5.3 以降の PHP で可変長パラメータを実装する方法
オンラインで検索したところ、func_num_args、func_get_arg、func_get_args などの関数を見つけましたが、すべての推測には互換性の問題がある可能性があります。 found php5.3 変更点の 1 つ: 「関数内にファイルを含めたり要求したりすると、ファイル内で func_get_arg()、func_get_args()、および func_num_args() 関数を使用できなくなります。」問題は、可変長パラメーターはバージョン php5.3 以降に実装する必要があるということです。どのように書けばよいのか、最も互換性のある書き方は何なのか、またオンラインで購入した仮想ホストに現在インストールされている php のバージョンは何ですか
ディスカッション(解決策)への返信
printf("php %s\n", phpversion());function f() { printf("参数个数: %d 参数值: %s\n", func_num_args(), join(', ', func_get_args()));}f(1,2,3);f('a','b','c','d');
php 5.4.31参数个数: 3 参数值: 1, 2, 3参数个数: 4 参数值: a, b, c, d
php 5.6.3参数个数: 3 参数值: 1, 2, 3参数个数: 4 参数值: a, b, c, d
エラーの状況は次のとおりです
test.php<?phpfunction foo() { include './fga.inc';}foo('First arg', 'Second arg');?>fga.inc<?php$args = func_get_args();var_export($args);?>
これ
関数 foo () {
include './fga.inc'
}
この書き方、投稿者はどのような状況でこれを書くのでしょうか?
少なくともこのように互換性がある必要があります
test.php<?phpfunction foo() { $args = func_get_args(); include './fga.inc';}foo('First arg', 'Second arg');?>fga.inc<?phpvar_export($args);?>
printf("php %s\n", phpversion());function f() { printf("参数个数: %d 参数值: %s\n", func_num_args(), join(', ', func_get_args()));}f(1,2,3);f('a','b','c','d');
php 5.4.31参数个数: 3 参数值: 1, 2, 3参数个数: 4 参数值: a, b, c, d
php 5.6.3参数个数: 3 参数值: 1, 2, 3参数个数: 4 参数值: a, b, c, d
実践こそが真実をテストするための唯一の基準であることがわかります
コードに他のファイルが含まれていない場合、もちろんエラーは発生しません
さらに、実践には環境、少なくとも 5.2 未満の環境も必要です。 5.2 以降の環境で十分です。使用している php のバージョンさえわかりません (もちろん、コードを読んだらわかります)
私のバージョンは 5.3.8、テストです 警告: func_get_args(): グローバル スコープから呼び出されます - いいえ3行目のE:wwwphptestfga.incの関数コンテキスト
test.php<?phpfunction foo() { include './fga.inc';}foo('First arg', 'Second arg');?>fga.inc<?php$args = func_get_args();var_export($args);?>
include './fga.inc';
この書き方では、ポスター どのような状況でこれを書きますか?
少なくともこのように互換性があるはずです
すごいです
まだテストしていませんので、まず試してみてください
仮想マシンに関しては、ほとんどが 5.2.x と 5.3.x であるはずです
2 つを実行してくださいコード、わかりました 、見つけた文
「• 関数内にファイルをインクルードまたは要求する場合、func_get_arg()、func_get_args()、および func_num_args() 関数はファイル内で使用できないことがわかりました
」 「ファイル内」とは、そのファイルがインクルードされることを指します。私はそのようなコードは絶対に書きません。一部のクラスまたは関数のファイルをインクルードするだけで、グローバル変数はインクルードしません。