ホームページ >バックエンド開発 >PHPチュートリアル >5.3 以降の PHP で可変長パラメータを実装する方法

5.3 以降の PHP で可変長パラメータを実装する方法

WBOY
WBOYオリジナル
2016-06-23 09:09:381043ブラウズ

オンラインで検索したところ、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);?>


まだテストしていないので、まず試してください

仮想マシンに関しては、ほとんどが 5.2 であるはずです

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 のバージョンさえわかりません (もちろん、コードを読んだらわかります)

あなたの書き方はモジュール性の原則に反しています
php5 について話しましょう。 2 深刻なセキュリティ問題のため、ずっと前に廃止されました
もしどうしても使いたいのであれば、それはあなたの個人的な問題だけです

私のバージョンは 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);?>

This thing
function foo() {

include './fga.inc';
この書き方では、ポスター どのような状況でこれを書きますか?
少なくともこのように互換性があるはずです
すごいです

まだテストしていませんので、まず試してみてください

仮想マシンに関しては、ほとんどが 5.2.x と 5.3.x であるはずです

2 つを実行してくださいコード、わかりました 、見つけた文
「• 関数内にファイルをインクルードまたは要求する場合、func_get_arg()、func_get_args()、および func_num_args() 関数はファイル内で使用できないことがわかりました
」 「ファイル内」とは、そのファイルがインクルードされることを指します。私はそのようなコードは絶対に書きません。一部のクラスまたは関数のファイルをインクルードするだけで、グローバル変数はインクルードしません。

皆さん、ありがとうございます。理解しました。でも、私はそれを誤解していました。文
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。