+ -
当前位置:首页 → 问答吧 → dirname的一个小问题

dirname的一个小问题

时间:2011-12-15

来源:互联网

函数名 :dirname
参数:文件路径
返回值:父目录路径。

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

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

PHP code
<?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);    



是什么原因呢?求解。。

作者: ohmygirl   发布时间: 2011-12-15

报错信息你至少要贴出来吧。。

作者: jordan102   发布时间: 2011-12-15

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

作者: ci1699   发布时间: 2011-12-15

引用 1 楼 jordan102 的回复:

报错信息你至少要贴出来吧。。


这么简单一个文件,随便运行下就知道是什么错误了。
给出的报错信息是语法错误。但是类外使用的话不会报语法错误。

作者: ohmygirl   发布时间: 2011-12-15

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

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

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

作者: xuzuning   发布时间: 2011-12-15

引用 2 楼 ci1699 的回复:

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


把static去掉也是一样的。。
一样会错误,这个直接在类中这样使用也是错误的:
private $dir = dirname(__FILE__);

作者: ohmygirl   发布时间: 2011-12-15

坐等大牛讲解

作者: yao970953039   发布时间: 2011-12-15

引用 4 楼 xuzuning 的回复:

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

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

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


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

谢谢唠叨大哥的解释。
也就是说:
在类中,类属性在定义时不能赋予不确定的值,所以会报编译错么?

作者: ohmygirl   发布时间: 2011-12-15

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

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


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

引用 5 楼 ohmygirl 的回复:

引用 2 楼 ci1699 的回复:

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


把static去掉也是一样的。。
一样会错误,这个直接在类中这样使用也是错误的:
private $dir = dirname(__FILE__);

作者: ci1699   发布时间: 2011-12-15

PHP code


<?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

引用 8 楼 ci1699 的回复:

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

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


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

引用 5 楼 ohmygirl 的……


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

只是属性的初始化这么用的话会错误的。

作者: ohmygirl   发布时间: 2011-12-15

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


引用 10 楼 ohmygirl 的回复:

引用 8 楼 ci1699 的回复:

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

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


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

……

作者: ci1699   发布时间: 2011-12-15