在类中连接已定义的变量和字符串时解析错误

时间:2010-07-20 09:12:23

标签: php class parse-error

我在一个单独的配置文件中定义了一个变量:

define('URL', 'someurl.co.uk');

但是,当我尝试使用它来连接类中的字符串时:

class AdminEmail extends Email {

   private $from = "jsmith".URL;

我收到以下错误:

Parse error: parse error, expecting `','' or `';'' 

但是,如果我回应它,​​它会完美显示!

希望我没有错过任何明显的东西!

2 个答案:

答案 0 :(得分:17)

在预定义类变量时,不能使用常量,函数或其他变量。类定义类似于蓝图,它们必须完全独立于脚本中的其他任何内容(当然,除了对其他类的依赖性。)

您必须稍后设置,例如在构造函数中:

class AdminEmail extends Email {

   private $from;

   function __construct()
   {
     $this->from = "jsmith".URL;
   }

或单独的功能:

   function setFrom($from)
    {
     $this->from = $from;
    }

答案 1 :(得分:1)

在预定义类变量时,可以使用常量,但不能使用函数或其他变量。此外,您不能使用.点字符串连接运算符之类的运算符。

有关详细信息,请参阅PHP OO Manual。请注意,在预定义类变量时,您可以使用array()构造。 array()不是一种功能,而是一种语言结构。

在这种情况下,您确实有两条路径可供选择作为解决方案。您可以在构造函数中定义值:

class AdminEmail extends Email {

  private $from;

  function __construct()
  {
     $this->from = "jsmith".URL;
  }

另一个解决方案是始终使用函数检索值:

class AdminEmail extends Email {

  private $from;

  function getFrom()
  {
     if (null === $this->from) {
         $this->from = "jsmith" . URL;
     }
     return $this->from;
  }