1

関数の特定の引数に値を渡すことができますか?

function fun1($a,$b)
{
echo $b;
}
@fun1(123);
4

4 に答える 4

3

関数は、すべてのパラメーターを必要としないように定義できます。例えば:

function foo($a, $b = 2) {
    echo $a + $b;
}

foo(1); //gives 3

関数のデフォルト値については、こちらを参照してください

ただし、前のパラメーターを指定せずに後のパラメーターを渡すことはできません。いくつかの単純なプログラミング関数パラメーターの基本...foo($b)関数を実行すると、変数に名前 bが付けられていることがわかりません...データを取得するだけです。通常はプリミティブ型 (この場合は int) または参照です。

これらの変数の使用方法を指定していないため、「-1」などのダミー値を$a(関数で処理する) に与えるfoo(-1, 123)か、関数を書き直して $a が 2 番目になるようにすることができます。デフォルト値を持つパラメーター。( function foo($b, $a = NULL))

そのため、変数を順番に渡す必要があります。関数は、正しく使用されていると想定し、関数定義で渡された値を並べます。「最初の値をに、2 番目の値を)function foo($a, $b)に関連付ける必要があると思います」を意味します。ab


あなたの元の例ではfunction foo($a, $b)

コンテキストがないので、 do this とだけ言いますfunction foo($b, $a = some_default_value)。ただし、$aand を$b同様に使用していると仮定しているので、それがデフォルトの無効な値であるかどうかを確認して、それに基づいて行動することができます。ただし、渡されたパラメーター (の数) に応じて関数が異なるタスクを実行する場合は、おそらく関数を分離する必要があります。

順序を切り替えないことを主張する場合はfoo(-1, 123)、ダミーの値で呼び出して確認できます。繰り返しますが、上記と同じ問題


編集:別の例を挙げて、中間値を更新しfoo($a, $b, $c)たいと言いました。foo($b)関数がどのパラメーターが何であるかを知る方法については、最初の段落の説明を参照してください。

任意の変数セットを関数に渡したいという意味で、関数はどの変数を取得したかを知っていますか? 繰り返しますが、これがベスト プラクティスだとは思いません (これをどのように使用しているかについて詳しく説明する必要があります) が、連想配列を渡すことができます。

function foo($arr) {
    if (isset($arr['a'])) {
        echo $a;
    }
    if (isset($arr['b'])) {
        echo $b;
    }
    if (isset($arr['c'])) {
        echo $c;
    }
}
foo(array('b' => 123));

この関数を書いた後、私はひどい気分になります:P


<?php
function FUN1($a, $b)
{
    echo "HI";
    echo $b;
} //$_a=    123; //error_reporting (E_ALL ^ E_NOTICE ^ E_WARNING); //$b=23; echo @FUN1(123);//it gives HI123 
?>

関数をフォーマットしました。まず、その呼び出しを試みたときに、「HI123」が表示されません。第二に、@悪い習慣であり、コードを本当に遅くします。第三に、echo FUN1何も返さないので、そうではありません。あなたの関数はもの自体を印刷します。

あなた(生徒)は間違った方向に進んでいます。コメントで述べたように、関数には既にパラメーターを整理する美しい方法があります。ファンキーなことをしてそれを回避しようとする代わりに、アプローチを変えてください。

上記の例には実際の用途はありません。実際のコードでは、さまざまな変数を設定するときにさまざまな関数を作成する必要があると確信しています。好きsetA($a) setB($b) setC($c) setAll($a, $b, $c)で、それに応じて使用してください。配列は簡単な可変長関数に役立ちますが、各タグをチェックして何かを行う場合は、何かが間違っています。

于 2012-07-18T16:08:36.237 に答える
1

不正確な点はご容赦ください。PHPでコーディングするのは久しぶりです。

引数の順序を確実にしたい場合は、単一の配列を引数として渡すことができます。

$args = array(
    'name' => 'Robert',
    'ID' => 12345,
    'isAdmin' => true
);

example($args);

function example($args)
{
    echo $args['name']; // prints Robert
    echo $args['ID']; // prints 12345
    echo $args['isAdmin']; // prints true
}

このアプローチを使用すると、デフォルト値を関数にハードコードして、引数配列で指定された場合にのみ置き換えることもできます。例:

$args = array(
    'name' => 'Robert',
    'ID' => 12345
    // Note that I didn't specify whether Robert was admin or not
);

example($args);

function example($args)
{
    $defaultArgs = array(
        'name' => '',
        'ID' => -1,
        'isAdmin' => false // provides a default value to incomplete requests
    );

    // Create a new, mutable array that's a copy of the default arguments
    $mixArgs = $defaultArgs;

    // replace the default arguments with what was provided
    foreach($args as $k => $v) {
        $mixArgs[$k] = $v;
    }

    /* 
      Now that we have put all the arguments we received into $mixArgs,
      $mixArgs is mix of supplied values and default values.  We can use
      this fact to our advantage:
    */

    echo $mixArgs['name']; // prints Robert

    // if ID is still set to the default value, the user never passed an ID
    if ($mixArgs['ID'] == -1) {
        die('Critical error! No ID supplied!');  // use your imagination
    } else {
        echo mixArgs['ID']; // prints 12345
    }

    echo mixArgs['isAdmin']; // prints false

    // ... etc. etc.
}

2018 年の PHP 構文とデフォルト

function example($args=[], $dftArgs=['name'=>'', 'ID' => -1, 'isAdmin'=>false])
{
    if (is_string($args)) 
       $args = json_decode($args,true); // for microservice interoperability
    $args = array_merge($dftArgs,$args); 
    // ... use $args
}
//  PS: $dftArgs as argument is not usual, is only a generalization
于 2012-07-18T16:21:39.447 に答える
1

引数を 1 つだけ渡したい場合は、次のようなラッパー関数を作成できます。

function PassOne($arg)
{
   fun1(NULL,$arg);
}


function fun1($a,$b)
{
 echo $b;
}
于 2012-07-18T16:18:10.043 に答える
0

いいえ。

NULLただし、慣例により、その位置で渡すことにより、組み込み関数への引数をスキップできます。

fun1(NULL, 123);

明らかに、これはすべてに意味があるわけではありません - たとえば、これは意味がありません:

$result = strpos(NULL, 'a string');

ユーザー定義関数の場合、適切と思われる方法で引数を処理するのはあなた次第ですが、不確定な数の引数を使用する関数には便利な場合がありfunc_get_arg()ます。func_get_args()

また、デフォルト値を定義することで、引数をオプションにすることができることを忘れないでください:

function fun ($arg = 1) {
  echo $arg;
}

fun(2); // 2
fun();  // 1

デフォルト値は、右端の引数でのみ定義できることに注意してください。右側の引数にデフォルト値がない場合、引数にデフォルト値を与えることはできません。したがって、これは違法です:

function fun ($arg1 = 1, $arg2) {
  // Do stuff heere
}
于 2012-07-18T16:05:56.040 に答える