web-dev-qa-db-ja.com

PHPパラメータのデフォルト値として変数を使用する関数

デフォルトでは、a PHP関数は_$_GET_変数を使用します。_$_GET_が設定されていない状況でこの関数を呼び出す必要がある場合があります。この場合、必要な変数を定義します次のようなパラメータとして:actionOne(234)

抽象コードを取得するために、次のようなことを試しました。

_function actionOne($id=$_GET["ID"])
_

これはエラーになります:

解析エラー:構文エラー、予期しないT_VARIABLE

変数を使用してデフォルトのパラメーターを定義することは不可能ですか?

編集

actionOneは、フレームワークYiiを使用して、URLから「直接」呼び出されます。この関数の外で_$_GET_変数を処理することにより、これを中央のコンポーネントで実行する必要がありました(シンプルで重要でない関数であっても)、またはフレームワークを変更する必要があります。

これを行うもう1つの方法は、URLによって呼び出されるダミー関数(事前関数のようなもの)です。この「ダミー」関数は変数の問題を処理し、actionOne($id)を呼び出します。

32
The Bndr

いいえ、これは不可能です 関数の引数のマニュアルページ

デフォルト値は、(たとえば)変数、クラスメンバー、または関数呼び出しではなく、定数式でなければなりません。

代わりに、単にデフォルトとしてnullを渡して、関数内でこれを更新することもできます...

function actionOne($id=null) {
    $id = isset($id) ? $id : $_GET['ID'];
    ....
}

...または(さらに良い)、渡す特定のIDがない場合は、引数値として$ _GET ['ID']を指定するだけです(つまり、関数の外でこれを処理します)。

51
John Parker
function actionOne( $id=null ) {
    if ($id === null) $id = $_GET['ID'];
}

しかし、私はおそらく関数の外でこれを行います:

// This line would change, its just a for instance
$id = $id ? $id : $_GET['id'];
actionOne( $id );
4
Galen

関数を呼び出す前に、そのIDを取得する必要があります。パラメータの存在を確認すると、カプセル化が解除されます。あなたはそのようなことをするべきです:

if (isset($_GET["ID"])
{
    $id = $_GET["ID"];
}
else
{
    //$id = something else
}

function doSomethingWithID($id)
{
    //do something
}
4
markus

はい、それは不可能です。

デフォルトは静的変数でなければなりません:

function actionOne( $id='something') {
    //code
}
2
Neal

簡単ピーナッツ!
(マイナーなミス、エラー、タイプミスが含まれている可能性があります!)

Main関数を再帰的に呼び出すヘルパー関数が必要ですが、デフォルトとしてNULLがあります。

間違った:function actionOne($id=$_GET["ID"])

正しい:

function actionOne($id) {...}
function actionOnewithID($id=NULL) {
  if (NULL==$id){actionOne($_GET["ID"]);}
  else {actionOne($id);
}

そして、値を返す必要がある場合:

function actionOne($id) {...}
function actionOnewithID($id=NULL) {
  if (NULL==$id){return(actionOne($_GET["ID"]));}
  else {return(actionOne($id));
}

これが役に立てば幸いです!

1

定数変数を使用できます

define('ID',$_GET["ID"]);
function($id = _ID_){
    //code
}
0
pablo henrique