我在PHP中有一个数组,其中一些输入只是文字字符串,而一个输入插入了一个变量。我收到的错误是“#34;语法错误,意外"",期待')'在66号线和34号线上。这对我来说没有意义,因为它只是一个字符串数组,我还没有关闭数组或做任何时髦的事情。
这是我的代码。
private $headerLink;
private $header = array(
"<header>",
"\t\t<h1><a href=$headerLink>Daily Drop</a></h1>",
"\t</header>"
);
$ headerLink在构造函数中初始化,因此它不是因为它是空的。我甚至尝试将其设置为&#34; test&#34;确保它不是,但它不起作用。
有谁知道导致此错误的原因以及如何修复它?
非常感谢!
答案 0 :(得分:4)
必须使用固定/常量值初始化对象属性。它们不能是表达的结果:
private $foo = 'bar'; // ok.
private $bar = 'baz' . 'qux'; // bad, this is an expression
private $baz = 'foo' . $foo;
// also bad - expression + undefined variable, should be $this->foo anyways
在你的情况下:
php > class foo { private $foo = array('foo', $bar, 'baz'); }
PHP Parse error: syntax error, unexpected T_VARIABLE, expecting ')' in php shell code on line 1
php > class foo { private $foo = array('foo', 'bar', 'baz'); }
php >
答案 1 :(得分:0)
初始化变量时,不能使用表达式并使用其他变量。
但是如果你想使用$header
设置$headerLink
值,你可以将一些代码移动到构造函数。
你可以这样做:
private $header = array(
"<header>",
"\t\t<h1><a href=[header_link]>Daily Drop</a></h1>",
"\t</header>"
);
public function _construct() {
// here other constructor tasks
$this->header[1] = str_replace('[header_link]', $this->$headerLink, $this->header[1]);
}
然而,最好的解决方案可能是创建新方法,然后:
private $header;
public function _construct() {
// here other constructor tasks
$this->setHeader($this->headerLink);
}
private function setHeader($headerLink) {
$this->header = array(
"<header>",
"\t\t<h1><a href=$headerLink>Daily Drop</a></h1>",
"\t</header>"
);
}