尝试使用方法外部的dirname()初始化此公共类变量时出错

时间:2011-05-27 17:54:09

标签: php class

为什么我不能使用函数设置公共成员变量?

<?

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

9 个答案:

答案 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