2016-08-25 20 views
1

串連字符串我遇到PHP的這種奇怪的行爲,指定字符串:PHP無法分析

class a { 
    public $str = "a" . 'b'; 
} 

$obj = new a(); 
echo $obj->str; 

永遠不會奏效,會引發以下錯誤:

PHP Parse error: syntax error, unexpected '.', expecting ',' or ';' in /var/www/test.php on line 2

,而使用純PHP它作品:

$str = "a" . 'b'; 
+0

你的問題是?我相信這是PHP5(所有?)的預期行爲,因爲您無法在屬性默認值中使用表達式? –

+1

順便說一句,這個_does_工作在PHP 7中。 –

+0

這從= 5.6開始有效 –

回答

2

您無法在構造函數之前對變量進行復雜賦值,您可以將簡單字符串或整數賦值給變量。點被視爲功能

如果您必須指定它們,您應該使用構造函數。

http://www.php.net/manual/en/language.oop5.properties.php

+0

在這種情況下,如果PHP版本> = 5.6.0,則不需要構造函數,這是第一個文檔的[示例](http://php.net/manual/en/language.oop5.properties.php #示例-217) – Riccardo

0

點。運算符充當函數,並且不能使用函數聲明類變量。

如果你有一個init或構造函數,你應該在這個函數中初始化變量。

function __construct() { 
    $this->str = 'a' . 'b'; 
} 
+1

然後可能你正在使用php <5.6 檢查phpinfo()查看你使用的是什麼版本的PHP –

+0

在這種情況下,如果PHP版本大於5.6.0,則不需要構造函數,這是第一個文檔的[示例](http://php.net/manual/en/language.oop5.properties.php#example-217) – Riccardo

+0

您使用的是什麼PHP版本?你有沒有檢查phpinfo();?什麼是輸出? –