为什么我不能使用函数设置公共成员变量?
<?
class TestClass {
public $thisWorks = "something";
public $currentDir = dirname( __FILE__ );
public function TestClass()
{
print $this->thisWorks . "\n";
print $this->currentDir . "\n";
}
}
$myClass = new TestClass();
?>
运行它会产生:
Parse error: syntax error, unexpected '(', expecting ',' or ';' in /tmp/tmp.php on line 7
答案 0 :(得分:13)
您不能在变量声明中使用表达式。您只能使用常量值。 dirname()
可能不会出现在此位置。
如果你使用PHP 5.3,你可以使用:
public $currentDir = __DIR__ ;
否则,您必须在$this->currentDir
或。
__construct
答案 1 :(得分:4)
根据PHP manual,您的实例变量:
必须能够在进行评估 编译时间,不能依赖 运行时信息才能成为 评价
因此,您无法在属性初始化中使用dirname函数。因此,只需使用constructor通过以下方式设置默认值:
public function __construct() {
$this->currentDir = dirname( __FILE__ );
}
答案 2 :(得分:2)
指定属性时无法调用函数。
请改用:
<?php
class TestClass{
public $currentDir = null;
public function TestClass()
{
$this->currentDir = dirname(__FILE__);
/* the rest here */
}
}
答案 3 :(得分:1)
在为成员变量指定默认值时,看起来无法调用函数。
答案 4 :(得分:1)
原因是您无法以静态方式使用函数分配实例变量。 PHP中根本不允许这样做。
我建议你这样做:
<?
class Foo {
public $currentDir;
public function __construct() {
$this->currentDir = dirname(__FILE__);
}
}
?>
答案 5 :(得分:1)
遗憾的是,您无法调用函数来声明类变量。但是,您可以从构造函数中将dirname( FILE )的返回值分配给$ this-&gt; currentDir。
编辑:提醒您:PHP中的构造函数=&gt; 5被称为__construct(),而不是类的名称。
答案 6 :(得分:1)
您可以改用:
public $currentDir = '';
public function TestClass()
{
$this->currentDir = dirname( __FILE__ );
...
答案 7 :(得分:1)
dirname
表达式导致错误,您无法将表达式声明为变量。你可以做到这一点。
<?
class TestClass {
public $thisWorks = "something";
public $currentDir;
public function __construct()
{
$this->currentDir = dirname( __FILE__ );
}
public function test()
{
echo $this->currentDir;
}
}
每次实例化一个新类时,都会在构造函数中设置dirname。我还建议省略关闭php标签?&gt;在你的文件中。有助于缓解和标头发送的错误
答案 8 :(得分:0)
在构造函数中执行此操作。 $ this-&gt; currentDir = dirname( FILE );
顺便说一下 print $ currentDir。 “\ n” 个; 在类中调用vars时使用$ this