PHP数组值和连接问题

时间:2011-02-28 18:26:23

标签: php arrays concatenation

我有一个简短的标题和消息,我要展示,定义以下内容:

class A {
  public $name = 'Mark';
  public $entry = array(
    'title'   => 'Some title',
    'message' => 'Hi '.$name
  );

  // Constructor
  public function __construct() {}

  // Some other functions
}

这不起作用。

有人可以解释原因吗?我应该改为使用单独的变量还是有更好的方法?谢谢你的时间。

修改

2 个答案:

答案 0 :(得分:2)

你试图在一个班级的财产申报中取消,不是吗?属性声明在COMPILE-TIME期间发生,并且只能接受值,而不是需要RUN-TIME发生的操作,并且连接肯定是运行时操作...而是将该行放入构造函数方法中。

class A
{
    public $name = 'Mark';
    public $entry = array("test");
    public $var1 = someFunct();    // WRONG, ITS AN OPERATION and REQUIRES RUNTIME
    public $var2 = 1 + 2; // WRONG, ITS AN OPERATION and REQUIRES RUNTIME
    public $var3 = CLASS_NAME::SOME_CONSTANT_OR_PROPERTY_HERE; // WORKS, CONSTANTS ARE DETECTED IN COMPILE-TIME
    public $var4 = $anythingWithDollarSign; // WRONG, SYNTAX ERROR, REQUIRES RUNTIME

    public function __construct() {
        $this->entry = array( 'title' => 'Some title', 'message' => 'Hi ' . $this->name );
    }
}

答案 1 :(得分:0)

在类中,您只能声明由静态值组成的变量,而不能声明"name" . $name等动态值。

你需要做的是构造函数中的concat,(这就是它的原因):

class A
{
    public $name = 'Mark';

    public $entry = array(
        'title'   => 'Some title',
        'message' => 'Hi %s'
    );

    // Constructor
    public function __construct()
    {
        $this->entry["message"] = sprintf($this->entry["message"],$this->name);
    }
}