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

时间:2010-04-09 04:43:24

标签: php variables constants

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

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

例如,

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

但上面不起作用。

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

最好的方法是什么?

3 个答案:

答案 0 :(得分:10)

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

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

}

$a = new MyClass();
var_dump($a->str);

但是这个:

  • 仅适用于PHP&gt; = 5.3
  • 并且字符串不得包含任何变量
    • 这是因为字符串的值必须在编译时知道
    • ,顺便说一句,解释了为什么连接.不起作用:它在执行时完成。

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


如果您使用 PHP&lt; = 5.2

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

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

(与换行符相同)

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

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

(这样,没有换行符)


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

class MyClass {
    public $str = "this is
a long
string";
}

(此处,您还会在结果字符串中添加换行符)

答案 1 :(得分:2)

$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;

哪个输出:

  

这是一个非常长的变量,为了便于阅读,我宁愿让它跨越多行。上帝这么热,在这里可以有人打开A / C吗?

您现在使用string concatenation operator工作。如果您可以发布有关您的问题的更多信息,某些代码或者对 如何的进一步说明不起作用。更多信息将引导您获得更好的答案。

答案 2 :(得分:0)

我正在使用PHP 5.5.9并且仅在class常量时遇到类似的问题。我想使用一个有点长的字符串作为常量,但我不想要:

  • 真的很长的代码行
  • 在断点处出现在文本中的换行符
  • 属性是可变的
  • 在课堂外无法进入的财产

我认为这里的解决方案是在Laravel 5脚手架中做了很多事情以及为什么他们一直这样做让我困惑到现在为止。他们做的是:

public static function getLongPropertyString()
{
    return 'A a string that can be arbitrarily long and contain as ' .
        'many breaks in the code as you want without line breaks ' .
        'appearing in the resulting string.';
}

此方法提供不可变字符串。你不是通过使用getter创建一个protected / private变量来严格实现这一点,因为它内部仍然是可变的。只更改代码或覆盖可以更改此字符串。另一个专业是,使其静态允许每个类一个“实例”。

不幸的是,现在您的代码将是Class::getProperty(),而不仅仅是Class::property。另一个缺点是每次调用函数时都会进行连接,但根据你使用它的方式,这个成本通常可以忽略不计。

如果PHP编译器能够识别只在编译时已知的值的连接操作可以在编译时运行并且结果被替换(比我更了解的知识,为什么会这样),那将是很酷的。