11
votes

La variable de chaîne constante de la classe PHP s'étend sur plusieurs lignes

Je veux avoir une variable de chaîne pour une classe PHP, qui serait disponible pour toutes les méthodes.

Cependant, cette variable est assez longue, je tiens donc à la séparer en plusieurs lignes. P>

Par exemple, P>

$variable = "line 1" .
            "line 2" .
            "line 3";


4 commentaires

Je ne vois aucune raison pour laquelle ce qui précède ne fonctionnera pas. Pouvez-vous publier exactement votre code. Merci.


Vous pouvez sûrement couvrir la variable sur plusieurs lignes, pouvez-vous publier le code et exactement comment cela ne fonctionne pas?


Vous pouvez accéder aux variables en dehors de la classe à l'aide du mot-clé global ou du $ global une matrice superglobale, au fait. Je ne le recommande pas cela, bien sûr.


Cracher une autre chose que PHP ne peut pas faire que toutes les autres langues sur Terre peuvent sans hâts.


3 Réponses :


11
votes

Si vous utilisez PHP> = 5.3 strong>, vous pouvez utiliser heredoc syntaxe pour déclarer votre chaîne:

class MyClass {
    public $str = "this is
a long
string";
}
  • est uniquement possible avec PHP> = 5.3 li>
  • et la chaîne ne doit pas contenir une variable
    • c'est parce que doit être connue à la compilation de la valeur de la chaîne li>
    • qui, d'ailleurs, explique pourquoi la concaténation, avec code>, ne fonctionnera pas.. Il est fait au moment de l'exécution li> Ul> li> Ul>

      Et un autre inconvénient est que cela met les nouvelles lignes dans la chaîne -. Qui pourrait, ou non, être une mauvaise chose p>


      Si vous utilisez PHP : p>

      Vous ne pouvez pas le faire; une solution pourrait être d'initialiser la chaîne dans votre constructeur de la classe: p>

      class MyClass {
          public $str;
          public function __construct() {
              $this->str = 'this is' .
                           'a long' .
                           'string';
          }
      }
      


6 commentaires

Ceci est dû au fait que la valeur de la chaîne doit être connue au moment de la compilation mal.


@stereofrogogue FR2.PL.net/Manual/fr/Language.oop5. properties.php dit Cette déclaration peut inclure une initialisation, mais cette initialisation doit être une valeur constante - c'est-à-dire qu'il doit être en mesure d'être évalué au moment de la compilation . vraiment mal?


Oh ; Avez-vous un exemple de travail d'initialisation d'une propriété de classe avec une valeur non constante?


J'ai posté qu'une fois, il va fondamentalement comme ça: définir ('foo', rand ()); classe x {var $ bar = foo; };


Oh je vois ; n'a pas pensé à utiliser des définir dans cette situation ^^ merci pour la note :-)


Aucune de ces méthodes ne fonctionne pour une classe statique ... -_- Neuflines dans certains cas d'un littéral de chaîne statique ne sont pas acceptables.



2
votes
$var = "this is a really long variable and I'd rather have it " .
 "span over multiple lines for readability sake. God it's so hot in here " .
 "can someone turn on the A/C?";
echo $var;
Which outputs:
  this is a really long variable and I'd rather have it span over multiple lines for readability sake. God it's so hot in here can someone turn on the A/C?
What you have now works using the string concatenation operator. If you can post more information regarding your issue, some code or perhaps a further explanation of how it doesn't work. More information will lead you to a better answer.

3 commentaires

Cela fonctionnera pour une variable à l'intérieur d'une méthode; Mais cela fonctionnera-t-il pour une propriété de classe? (que je crois est quelle est la question à propos de)


Bonjour, comme dit Martin, je voulais déclarer la variable à l'extérieur de la classe, puis l'accéder dans une méthode. $ var = "line1". "ligne 2"; fonctionne si je le déclare dans une fonction, mais je ne le fais pas à l'extérieur. Ça ne me laissera même pas.


Ah, que je n'ai pas essayé, je pourrais le tester quand je suis de retour du travail, si nécessaire. Mais il semble que vous aviez déjà trouvé une solution.



0
votes

J'utilise PHP 5.5.9 et je suis tombé sur un problème similaire uniquement avec Constantes de classe . Je veux utiliser une ficelle un peu longue comme une constante mais je ne veux pas:

  • Vraiment longues lignes de code
  • nouvelles lignes montrant dans le texte à la pause
  • la propriété pour être mutable
  • la propriété pour être inaccessible en dehors de la classe

    Je pense que la solution ici est quelque chose qui se fait beaucoup dans l'échafaudage Laravel 5 et pourquoi ils ont continué à faire cela m'avait déconcerté jusqu'à maintenant. Ce qu'ils font, c'est quelque chose comme: xxx

    Cette méthode fournit une chaîne immuable . Vous n'obtenez pas strictement cela en créant un protégé / Variable avec getters depuis sa nature mutable en interne. La modification du code ou le remplacement ne peut modifier que cette chaîne. Un autre pro est que la fabrication statique permet une seule "instance" par classe.

    Malheureusement, votre code serait maintenant Classe :: getProperty () plutôt que simplement Classe :: Propriété . Un autre inconvénient est que la concaténation se ferait chaque fois que vous appelez la fonction mais en fonction de la manière dont vous utilisez cela, ce coût est généralement négligeable.

    Ce serait cool si le compilateur PHP était capable de reconnaître que le compilateur PHP L'opération de concaténation sur uniquement les valeurs déjà connues au moment de la compilation peut être exécutée au moment de la compilation et le résultat substitué (des êtres plus compétents que moi savons pourquoi cela en est ainsi).


2 commentaires

Si vous n'ajoutez pas d'un setter et aucune méthode ne le modifie, une variable privée est également immuable que si vous modifiez le code. Mais retourner la chaîne d'une méthode pourrait donner une intention plus claire quant à ce que vous faites.


Je suis d'accord. Je viens de suggérer ce formulaire car il n'y a pas de moyen implicite de changer la chaîne sans alléger intentionnellement la méthode ou de modifier le texte à l'intérieur. Le seul moyen de modifier la chaîne consiste à remplacer la méthode ou à modifier le code à l'intérieur. À cet égard, c'est plus proche à immuable, car nous avons supprimé des moyens involontaires de la modifier.