Par défaut, une fonction PHP utilise les variables $_GET
. Parfois, cette fonction doit être appelée dans une situation où $_GET
N'est pas définie. Dans ce cas, je définirai la variables nécessaires comme paramètre comme: actionOne(234)
Pour obtenir un code abstrait, j'ai essayé quelque chose comme ceci:
function actionOne($id=$_GET["ID"])
ce qui entraîne une erreur :
Erreur d'analyse: erreur de syntaxe, T_VARIABLE inattendu
Est-il impossible de définir un paramètre par défaut à l'aide d'une variable?
Modifier
Le actionOne
est appelé "directement" à partir d'une URL en utilisant le framework Yii . En manipulant les variables $_GET
En dehors de cette fonction, j'ai dû le faire sur un composant central (même si c'est une fonction simple et insignifiante) ou je dois changer le cadre, ce que je n'aime pas faire.
Une autre façon de le faire pourrait être une fonction factice (quelque chose comme une pré-fonction), qui est appelée par l'URL. Cette fonction "factice" gère la variable-issue et appelle la actionOne($id)
.
Non, ce n'est pas possible, comme indiqué sur la page de manuel des arguments de fonction :
La valeur par défaut doit être une expression constante, pas (par exemple) une variable, un membre de classe ou un appel de fonction.
Au lieu de cela, vous pouvez simplement passer null par défaut et le mettre à jour dans votre fonction ...
function actionOne($id=null) {
$id = isset($id) ? $id : $_GET['ID'];
....
}
... ou (mieux encore), fournissez simplement $ _GET ['ID'] comme valeur d'argument lorsque vous n'avez pas d'ID spécifique à transmettre. (c'est-à-dire: gérez-le en dehors de la fonction.)
function actionOne( $id=null ) {
if ($id === null) $id = $_GET['ID'];
}
Mais, je le ferais probablement en dehors de la fonction:
// This line would change, its just a for instance
$id = $id ? $id : $_GET['id'];
actionOne( $id );
Vous devriez obtenir cet identifiant avant d'appeler la fonction. La vérification de l'existence du paramètre interrompt l'encapsulation. Vous devriez faire quelque chose comme ça:
if (isset($_GET["ID"])
{
$id = $_GET["ID"];
}
else
{
//$id = something else
}
function doSomethingWithID($id)
{
//do something
}
Oui c'est impossible.
La valeur par défaut doit être une variable statique:
function actionOne( $id='something') {
//code
}
Arachides faciles!
(Peut contenir des erreurs mineures, des erreurs ou des fautes de frappe!)
Vous avez besoin d'une fonction d'assistance, qui vous appellera récursivement la fonction principale, mais ayant NULL par défaut:
Mauvais: function actionOne($id=$_GET["ID"])
Droite:
function actionOne($id) {...}
function actionOnewithID($id=NULL) {
if (NULL==$id){actionOne($_GET["ID"]);}
else {actionOne($id);
}
Et si vous devez renvoyer une valeur:
function actionOne($id) {...}
function actionOnewithID($id=NULL) {
if (NULL==$id){return(actionOne($_GET["ID"]));}
else {return(actionOne($id));
}
J'espère que ça aide!
Vous pouvez utiliser une variable constante
define('ID',$_GET["ID"]);
function($id = _ID_){
//code
}