Question

Mon code:

$myText = "";

function addText($textString){
   $myText .= $textString;
}

addText("Hello there...");

echo $myText;

Production attendue:

Bonjour...

$myText était vide.

Pourquoi cela arrive-t-il?

Était-ce utile?

La solution

essaye ça:

$myText = "";

function addText($textString){
   global $myText;
   $myText .= $textString;
}

addText("Hello there...");

echo $myText;

La raison pour laquelle vous devez faire est la Colombie-Britannique $myText n'est pas dans la portée de la fonction.
Donc, pour le mettre dans la portée, vous devez dire à la fonction quelles variables globales utiliser

Voici la démo: http://codepad.org/deh89no6

Autres conseils

Vous devez dire à la fonction d'utiliser la variable globale $ mytext

function addText($textString){
   global $myText;
   $myText .= $textString;
}

Bien que l'utilisation de variables globales dans les fonctions soit considérée comme nocive.

Ok, laissez-moi vous aider plutôt que de vous dire simplement comment faire fonctionner votre exemple actuel. Fondamentalement, les variables définies en dehors d'une fonction personnalisée ne sont pas visibles à l'intérieur. Dans votre exemple, votre fonction n'a aucune idée de ce que $ myText est car il a été déclaré côté de la portée des fonctions. Pour transmettre des variables à une fonction, vous devrez les ajouter comme paramètres - les variables que vous passez avec une fonction lorsque vous définissez puis lorsque vous l'appelez, par exemple: function addText($param1, $param2).

Comme d'autres l'ont mentionné, vous pouvez permettre aux fonctions de voir certaines variables en utilisant le global Mot-clé, mais utilise vraiment cela pour des choses abstraites comme les connexions de la base de données, pas les données réellement que vous souhaitez configurer, faire tout cela dans votre fonction.

J'espère que cela vous aidera à comprendre un peu plus PHP.

C'est ce que vous appelez la portée des variables. C'est la partie du code où votre variable est connue comme expliqué ici. Pour rendre une nouvelle encore plus courte, même si votre $ MyText à l'intérieur de la fonction partage le nom avec celui à l'extérieur, ils sont complètement différents. Ce sont des boîtes différentes, une dans votre chambre (celle à l'intérieur de votre fonction) et une à l'extérieur (l'autre). Même s'ils sont étiquetés de la même manière, les choses que vous mettez dans l'un d'entre elles n'apparaîtraient pas à l'intérieur de l'autre aussi. Il y a deux façons de faire ce que vous voulez faire.

D'abord la manière facile mais mauvaise: faites une grande boîte, y compris la boîte en ajoutant le mot-clé global à celui à l'intérieur de la fonction comme affiché précédemment. C'est comme dire "Regardez dehors pour une boîte avec cette étiquette et utilisez celle-ci." Mais rappelez-vous: les variables globales sont mauvaises.

Tente comme le côté obscur peut être là, il y a un autre moyen ... emporter votre boîte avec vous ...

$myText = "";

function addText($existingText, $textToAdd) {
    return $existingText . $textToAdd;
}

addText($myText, "Look, it's there!");

echo $myText;

Que la source soit avec vous.

Obtenez la fonction pour renvoyer la chaîne

function addText($textString){
   $myText .= $textString;
   return $myText
}

$ myText = addText ('String');

Cela a à voir avec portée variable. Fondamentalement $myText en dehors de addText est différent de $myText à l'intérieur de la fonction. Vous pouvez l'utiliser pour définir la variable à l'intérieur de la fonction sur celle en dehors de celle-ci:

function addText($textString){
    global $myText;
    $myText .= $textString;
}

Juste une autre version de ça ...

$myText = "The quick brown fox";

echo addText(" jumped over the lazy dog.", $myText);

function addText($addString,$toVar) {
    $newString = $toVar.$addString;
    return $newString;
} 

La portée (durée de vie des variables) d'une fonction n'atteint pas en dehors de la fonction. À cette tâche simple, je ne vois pas pourquoi vous faites une fonction. Cependant, une variable transmise dans une fonction est copiée dans la portée des fonctions, même si vous nommez la variable de la même manière, elle ne sera pas la même. Pour pouvoir récupérer quelque chose en dehors de la fonction, vous devez utiliser une instruction de retour.

(Avec C ++, votre approche aurait été possible si le paramètre de la fonction était passé comme référence)

Mais, une solution possible à votre problème peut être:

function addText($text){
    return $text;
}
$myText .= addText("Hello there");
echo $myText;

Mais encore une fois, je ne vois pas la raison de faire une fonction pour cette tâche simple

La portée de la variable PHP est un peu différente de la portée dans d'autres langues auxquelles vous pourriez être habitué. Pour la variable $myText être visible à l'intérieur de la fonction addText, vous devez utiliser le global mot-clé:

$myText = "";

function addText($textString){
   global $myText; //added this line
   $myText .= $textString;
}

addText("Hello there...");

echo $myText;

Alternativement, si le code est à l'intérieur d'une classe, vous pouvez faire de $ MyText une variable au niveau de la classe en utilisant le mot-clé $this:

class SomeClass{
   function __init__(){
      $this->myText = "";
   }
   function addText($textString){
      $this->myText .= $textString;
   }

   function someFunction(){
      $this->addText("Hello there...");
   echo $this->myText;
   }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top