跨越多行的PHP类常量字符串变量

eri*_*bae 11 php variables constants

我希望有一个PHP类的字符串变量,可供所有方法使用.

但是,这个变量很长,所以我想把它分成多行.

例如,

$variable = "line 1" .
            "line 2" .
            "line 3";
Run Code Online (Sandbox Code Playgroud)

但上面不起作用.

我尝试了EOD,但是EOD在课堂上是不允许的.当我在课外声明它时,我无法从类中访问该变量.

什么是最好的方法?

Pas*_*TIN 10

如果您使用的是PHP> = 5.3,则可以使用HEREDOC语法来声明您的字符串:

class MyClass {
    public $str = <<<STR
this is
a long
string
STR;

}

$a = new MyClass();
var_dump($a->str);
Run Code Online (Sandbox Code Playgroud)

但是这个 :

  • 只有PHP> = 5.3才能实现
  • 并且字符串不能包含任何变量
    • 这是因为必须在编译时知道字符串的值
    • 哪,顺便说一句,解释了为什么连接,用.,不会起作用:它是在执行时完成的.

另一个缺点是,这将在字符串中添加换行符 - 这可能或不会是一件坏事.


如果您使用PHP <= 5.2:

你做不到; 一个解决方案可能是在类的构造函数中初始化字符串:

class MyClass {
    public $str;
    public function __construct() {
        $this->str = <<<STR
this is
a long
string
STR;
    }
}
Run Code Online (Sandbox Code Playgroud)

(同样没有换行)

或者,在这里,您可以进行字符串连接:

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

(这样,没有新行)


否则,你可以有一个被单引号或双引号括起来的字符串,并把它放在几行上:

class MyClass {
    public $str = "this is
a long
string";
}
Run Code Online (Sandbox Code Playgroud)

(在这里,您将在结果字符串中添加换行符)