默认情况下,PHP函数使用$_GET
个变量。有时,在未设置$_GET
的情况下应调用此函数。在这种情况下,我将所需的变量定义为参数,如:actionOne(234)
为了得到一个抽象代码我试过这样的事情:
function actionOne($id=$_GET["ID"])
导致错误:
解析错误:语法错误,意外T_VARIABLE
使用变量?
是否无法定义默认参数修改
使用框架 Yii 从URL“直接”调用actionOne
。通过处理此函数之外的$_GET
变量,我必须在一个中心组件上执行此操作(即使它是一个简单,无关紧要的函数),或者我必须更改框架,我不喜欢这样做。< / p>
另一种方法可能是虚拟函数(类似于预函数),由URL调用。这个“虚拟”函数处理变量问题并调用actionOne($id)
。
答案 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
}