valores - php optional parameters
Función PHP con variable como valor predeterminado para un parámetro (5)
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!
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 sintaxis, 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)
.
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
}
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).
Sí, es imposible.
El valor predeterminado tiene que ser una variable estática:
function actionOne( $id=''something'') {
//code
}
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 );