我在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__)
吗?
答案 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";
}
}