web-dev-qa-db-fra.com

PHP fonction avec variable comme valeur par défaut pour un paramètre

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

32
The Bndr

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

51
John Parker
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 );
4
Galen

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
}
4
markus

Oui c'est impossible.

La valeur par défaut doit être une variable statique:

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

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!

1
Mihail Gershkovich

Vous pouvez utiliser une variable constante

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