6

dirname(__FILE__)在 php 脚本中使用了 include,但前几天我将它作为字符串的一部分包含在内,它导致了一个错误。有任何想法吗?

这条线是

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

或者

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

它导致了一个错误,例如

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

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

编辑:

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

4

4 回答 4

5

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

可以使用常量,正如我之前在上面的评论中所指出的,__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';
    }
}

希望有帮助。

于 2013-09-19T12:33:41.820 回答
2

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

这个声明可能包括一个初始化,但是这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息才能被评估。来源

于 2013-09-19T12:21:52.363 回答
0

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

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

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

此代码也会引发相同的错误:

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

此代码不会引发错误:

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

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

class Foo() {
   function getThing() {
      return "string1"+"string2";
   }
}
于 2013-09-19T12:34:54.573 回答
0

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

于 2013-09-19T12:50:20.563 回答