PHP函数,变量作为参数的默认值

时间:2011-05-02 16:01:57

标签: php function variables parameters

默认情况下,PHP函数使用$_GET个变量。有时,在未设置$_GET的情况下应调用此函数。在这种情况下,我将所需的变量定义为参数,如:actionOne(234)

为了得到一个抽象代码我试过这样的事情:

function actionOne($id=$_GET["ID"])

导致错误

  

解析错误:语法错误,意外T_VARIABLE

使用变量?

是否无法定义默认参数

修改

使用框架 Yii 从URL“直接”调用actionOne。通过处理此函数之外的$_GET变量,我必须在一个中心组件上执行此操作(即使它是一个简单,无关紧要的函数),或者我必须更改框架,我不喜欢这样做。< / p>

另一种方法可能是虚拟函数(类似于预函数),由URL调用。这个“虚拟”函数处理变量问题并调用actionOne($id)

6 个答案:

答案 0 :(得分:50)

不,这是不可能的,如Function arguments manual page所述:

  

默认值必须是常量   表达,而不是(例如)a   变量,类成员或函数   调用

相反,你可以简单地传入null作为默认值,并在你的函数中更新它...

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

...或(更好的是),当您没有要传入的特定ID时,只需提供$ _GET ['ID']作为参数值。(即:在函数外处理它。)

答案 1 :(得分:4)

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 );

答案 2 :(得分:3)

在调用函数之前,你应该得到那个id。检查参数是否存在破坏封装。你应该这样做:

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

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

答案 3 :(得分:1)

是的,这是不可能的。

默认值必须是静态变量:

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

答案 4 :(得分:1)

简单的花生!
(可能包含轻微错误,错误或拼写错误!)

你需要一个辅助函数,它会以递归方式调用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));
}

我希望这有帮助!

答案 5 :(得分:1)

您可以使用常量变量

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