解释器如何知道双引号变量何时结束?

时间:2013-02-18 18:11:52

标签: php interpreter

我正在使用这个有效的代码:

$this->path_medium = $this->PICTURES . "$this->file_hash-2.jpg";

但是,我需要更新它,因为它不太可读;

$this->file_hash

是一个变量。

-2.jpg

是我附加到变量的字符串。

解释器如何知道变量的结束位置和字符串的开始位置。

5 个答案:

答案 0 :(得分:2)

您的代码恰好工作的原因是因为-不是变量名中的有效字符。 PHP停止在遇到无效变量名称字符的边界处解析变量名称。如果您曾尝试这样做:

$this->path_medium = $this->PICTURES . "$this->file_hash2.jpg";

PHP会认为$this->file_hash2是被引用的变量。

有几种方法可以解决这个问题。我个人的偏好是根本不将变量括在引号中,如下所示:

$this->path_medium = $this->PICTURES . $this->file_hash . '-2.jpg';

您还可以在变量周围使用{}以提高可读性:

$this->path_medium = $this->PICTURES . "{$this->file_hash}-2.jpg";

答案 1 :(得分:2)

  

解释器如何知道变量的结束位置和字符串   开始。

变量不包含( - )字符。喜欢(echo "$var-$var";)然后PHP在这种情况下将file_hash视为变量。

来自http://www.php.net/manual/en/language.variables.basics.php

  

变量名遵循与PHP中其他标签相同的规则。有效的变量名称以字母或下划线开头,后跟   任意数量的字母,数字或下划线。作为一个常规   表达,它将表达如下:   '[A-ZA-Z_ \ x7f- \ XFF] [A-ZA-Z0-9_ \ x7f- \ XFF] *'

答案 2 :(得分:1)

尝试:

$this->path_medium = $this->PICTURES . $this->file_hash . "-2.jpg";

答案 3 :(得分:1)

  

此外,我如何更新此内容,以便更清楚?

围绕变量包裹curles:

$this->path_medium = "{$this->PICTURES}{$this->file_hash}-2.jpg";

(或使用连接,就像你对第一个变量所做的那样)

  

口译员如何知道

我认为它会停在变量的第一个无效字符处(-就是其中之一)

答案 4 :(得分:0)

语法上是否正确将变量插入字符串中,因此必须使用@Sean代码,否则编译器无法“拆分”变量文本。