dirname的一个小问题

ohmygirl 2011-12-15 02:28:30
函数名 :dirname
参数:文件路径
返回值:父目录路径。

使用方法很简单:
require dirname(__FILE__).'/class.test.php';

但是在类中使用为什么会报错呢?

<?php
require_once dirname(__FILE__).'./test.php';
class testDirname{
public static $file_config = array(//下面会报错
'syn_file'=> dirname(__FILE__).'/data/syn_file',
'log_file'=> dirname(__FILE__).'/data/log_file',
'oper_file'=> dirname(__FILE__).'data/oper-file',
'test' => dirname('E:\www\dirname.php'),
);
public function getFileList(){

}
private function check(){

}
}


$file_config = array(//类之外使用是正确的。
'syn_file'=> dirname(__FILE__).'/data/syn_file',
'log_file'=> dirname(__FILE__).'/data/log_file',
'oper_file'=> dirname(__FILE__).'data/oper-file',
'test' => dirname('E:\www\dirname.php'),
);

print_r($file_config);



是什么原因呢?求解。。
...全文
231 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ohmygirl 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ci1699 的回复:]

那就是唠叨大神说的意思吧。赋值不能有不确定因素。
不过不是dirname问题。也不是__FILE__问题。


引用 10 楼 ohmygirl 的回复:

引用 8 楼 ci1699 的回复:

我是说不能用函数啊。
<?php
class testDirname{
public $file_config = addslashes('b');
}

$t = ne……
[/Quote]

恩,唠叨大哥解释后,大约就知道了。

之前一直以为是dirname 和__FILE__在类中因为没有实例化类,所以会出错呢,后来测试了下发现__construct中可以使用,也测试了下set和在其他的方法中使用,发现都没有问题。以为这个一个bug呢。所以才会以为是dirname的原因。

总结的说就是唠叨大哥那句话:
类属性在定义时不能赋予不确定的值,谢谢大家。
ci1699 2011-12-15
  • 打赏
  • 举报
回复
那就是唠叨大神说的意思吧。赋值不能有不确定因素。
不过不是dirname问题。也不是__FILE__问题。


[Quote=引用 10 楼 ohmygirl 的回复:]

引用 8 楼 ci1699 的回复:

我是说不能用函数啊。
<?php
class testDirname{
public $file_config = addslashes('b');
}

$t = new testDirname();
echo $t -> file_config;


你写个函数来set一下吧。或在类__construct中set一下。

……
[/Quote]
ohmygirl 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ci1699 的回复:]

我是说不能用函数啊。
<?php
class testDirname{
public $file_config = addslashes('b');
}

$t = new testDirname();
echo $t -> file_config;


你写个函数来set一下吧。或在类__construct中set一下。

引用 5 楼 ohmygirl 的……
[/Quote]

恩,我知道在construct中设置是可以的,set也是可以的,因为他们是在运行时被赋值的。

只是属性的初始化这么用的话会错误的。
ci1699 2011-12-15
  • 打赏
  • 举报
回复


<?php
class testDirname{
public $file_config = '0_0';

function __construct()
{
$this->file_config = dirname(__FILE__).'/data/log_file';
}
}

$t = new testDirname();
echo $t -> file_config;
ci1699 2011-12-15
  • 打赏
  • 举报
回复
我是说不能用函数啊。
<?php
class testDirname{
public $file_config = addslashes('b');
}

$t = new testDirname();
echo $t -> file_config;


你写个函数来set一下吧。或在类__construct中set一下。

[Quote=引用 5 楼 ohmygirl 的回复:]

引用 2 楼 ci1699 的回复:

定属性貌似不能用函数。
其它函数一样。不只是dirname。


把static去掉也是一样的。。
一样会错误,这个直接在类中这样使用也是错误的:
private $dir = dirname(__FILE__);
[/Quote]
ohmygirl 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xuzuning 的回复:]

这是因为类属性在定义时不能赋予不确定的值!
常量 __FILE__ 要在运行时刻才产生

你写成静态方法不是一样吗?只不过多了对括号

题外话:
diname(__FILE__) 返回的是程序文件所在的目录,这样一来你的目录结构显得好奇怪的
一般类定义文件在网站目录结构中占据固定位置,似乎并不需要 diname(__FILE__) 吧?
[/Quote]

恩,一般类定义文件在网站目录结构中占据固定位置。
是昨天写测试配置文件的时候偶然发现的错误。

谢谢唠叨大哥的解释。
也就是说:
在类中,类属性在定义时不能赋予不确定的值,所以会报编译错么?
「已注销」 2011-12-15
  • 打赏
  • 举报
回复
坐等大牛讲解
ohmygirl 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ci1699 的回复:]

定属性貌似不能用函数。
其它函数一样。不只是dirname。
[/Quote]

把static去掉也是一样的。。
一样会错误,这个直接在类中这样使用也是错误的:
private $dir = dirname(__FILE__);
xuzuning 2011-12-15
  • 打赏
  • 举报
回复
这是因为类属性在定义时不能赋予不确定的值!
常量 __FILE__ 要在运行时刻才产生

你写成静态方法不是一样吗?只不过多了对括号

题外话:
diname(__FILE__) 返回的是程序文件所在的目录,这样一来你的目录结构显得好奇怪的
一般类定义文件在网站目录结构中占据固定位置,似乎并不需要 diname(__FILE__) 吧?
ohmygirl 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jordan102 的回复:]

报错信息你至少要贴出来吧。。
[/Quote]

这么简单一个文件,随便运行下就知道是什么错误了。
给出的报错信息是语法错误。但是类外使用的话不会报语法错误。
ci1699 2011-12-15
  • 打赏
  • 举报
回复
定属性貌似不能用函数。
其它函数一样。不只是dirname。
一起混吧 2011-12-15
  • 打赏
  • 举报
回复
报错信息你至少要贴出来吧。。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧