我可以使用dirname(__ FILE__)作为字符串的一部分吗?

时间:2013-09-19 12:19:55

标签: php

我在PHP脚本中使用了dirname(__FILE__)但是有一天我将它作为字符串的一部分包含在内并且它导致了错误。有什么想法吗?

这条线是

private $errorfile = dirname(__FILE__).'/../../../error_logs/error.log';

private $errorfile = '/../../../error_logs/error.log';
error_log($message,3, dirname(__FILE__).$this->errorfile);

并导致错误,例如

  

PHP Parse错误:语法错误,意外'(',期待','或';'在/home2/futsalti/public_html/_futsal-time-v4.9/public/scripts/php/databaseClass.php

     

PHP Parse错误:语法错误,意外';'在/home2/futsalti/public_html/_futsal-time-v4.9/public/scripts/php/databaseClass.php

编辑:

好的,刚来找我......也许问题应该是我可以在课堂上使用dirname(__FILE__)吗?

4 个答案:

答案 0 :(得分:4)

属性默认值必须是固定的常量值;您不能在属性的默认值中使用动态值,变量,连接字符串或函数调用。

可以使用常量,正如我在前面的评论中所提到的,__DIR__dirname(__FILE__)的有效替代。

因此,您可以这样做:

class myClass {
    public $path = __DIR__;
}

这样可行,但你不能在初始声明中添加任何其他东西,所以虽然它越来越接近,但它并没有真正回答你的问题。

如果它需要更多,你需要在代码中定义它而不是默认值。我建议在属性声明中将变量声明为空字符串或null,并使用__construct()函数根据需要填充值。

class myClass {
    public $errorFile = null;
    public function __construct() {
         $this->errorFile = __DIR__ . ''/../../../error_logs/error.log';
    }
}

希望有所帮助。

答案 1 :(得分:2)

是的,您可以在课程中使用dirname(__FILE__),但不能直接使用。在使用该路径之前调用某个函数中的$errorfile路径。

  

此声明可能包括初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。 source

答案 2 :(得分:0)

是的,你可以,你可以在任何地方使用它,但你不能用它来设置类中属性的默认值。实际上你一般不能使用任何功能。如果你想在每次实例化类时将其设置为默认值,那么将它放在构造函数中

答案 3 :(得分:-1)

您尝试将两个字符串连接在一起作为类中已定义属性的默认值。你根本不能使用任何操作。

例如,此代码会抛出您遇到的错误:

class Foo() {
    private $bar = "string1"."string2";
}

此代码也会抛出相同的错误:

class Foo() {
    private $bar = 1+1;
}

此代码不会引发错误:

class Foo() {
    private $bar = "string1string2";
}

问题的可能解决方法可能是创建一个返回错误日志的方法。

class Foo() {
   function getThing() {
      return "string1"+"string2";
   }
}