Función PHP con variable como valor predeterminado para un parámetro

Por defecto, una función PHP usa $_GET variables. A veces, esta función debe $_GET en una situación en la que $_GET no está establecido. En este caso actionOne(234) las variables necesarias como un parámetro como: actionOne(234)

Para obtener un código abstracto intenté algo como esto:

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

que resulta en un error :

Error de análisis: error de syntax, inesperado T_VARIABLE

¿Es imposible definir un parámetro predeterminado utilizando una variable?

Editar

El actionOne se llama “directamente” desde una URL utilizando el marco Yii . Al manejar las variables $_GET fuera de esta función, tuve que hacer esto en un componente central (incluso si se trata de una función simple e insignificante) o tengo que cambiar el marco, lo que no me gusta hacer.

Otra forma de hacer esto podría ser una función ficticia (algo así como una pre-función), que es llamada por la URL. Esta función “ficticia” maneja el problema variable y llama a actionOne($id) .

No, esto no es posible, como se indica en la página del manual de argumentos de la función :

El valor predeterminado debe ser una expresión constante, no (por ejemplo) una variable, un miembro de clase o una llamada a función.

En su lugar, puede simplemente pasar nulo como el predeterminado y actualizarlo dentro de su función …

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

… o (mejor aún), simplemente proporcione $ _GET [‘ID’] como el valor del argumento cuando no tenga una identificación específica para pasar. (es decir: maneje esto fuera de la función).

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

Pero, probablemente haría esto fuera de la función:

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

Debería obtener esa identificación antes de llamar a la función. Comprobando la existencia del parámetro rompe la encapsulación. Deberías hacer algo como eso:

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

Sí, es imposible.

El valor predeterminado tiene que ser una variable estática:

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

Cacahuetes fáciles!
(Puede contener errores menores, errores o errores tipográficos)

Necesitas una función auxiliar, que te llamará a la función principal recursivamente, pero teniendo NULL como valor predeterminado:

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

Derecha:

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

Y si necesita devolver un valor:

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

¡Espero que esto ayude!