php > require_once('System.php');
php > System::users();
PHP Fatal error:  Call to undefined method System::users() in php shell code on line 1这似乎同时发生在交互式命令行和一个简单的脚本中:
<?php
require_once('System.php');
var_dump(System::users());
?>System.php在PHP路径中,并且正确地包括:
php > echo (class_exists('System')) ? 'THERE!' : 'WHERE?';
WHERE?
php > require_once('System.php');
php > echo (class_exists('System')) ? 'THERE!' : 'WHERE?';
THERE!
php > System::users();
PHP Fatal error:  Call to undefined method System::users() in php shell code on line 1我很难理解为什么它说调用一个未定义的方法,而实际上它是静态的,它在那里,并且应该是可访问的。
<?php
class System
{
    public static function users()
    {
        $users = array();
        if( !$data_array = file('/etc/passwd') )
        {
            return false;
        }
        foreach( $data_array as $line )
        {
            $data = explode(":", $line);
            $user = array_shift($data);
                list(, $uid, $gid, $info, $path, $terminal) = $data;
            $tmp = array();
            $tmp['uid'] = $uid;
            $tmp['gid'] = $gid;
            $tmp['name'] = array_shift(explode(',', $info));
            $tmp['path'] = $path;
            $tmp['terminal'] = $terminal;
            $users[$user] = $tmp;
            unset($tmp);
        }
        return $users;
    }
    public static function user( $user )
    {
        $users = self::users();
        if( array_key_exists($user, $users) )
        {
            return $users[$user];
        }
        else
        {
            return false;
        }
    }
}
?>PHP 5.3.2-1ubuntu4.5与Suhosin (cli) (构建:2010年9月17日13:49:46) (c) 1997-2009年PHP组 Zend Engine v2.3.0,版权(c) 1998-2010年Zend技术
发布于 2010-11-09 01:59:37
确保您包含了正确的文件--可能是类文件中某个位置的回显,并查看它在包含时是否回显。如果没有回显,您将得到错误的System.php文件。
如果有一个文件与您在多个包含路径中指定的名称相匹配,PHP将只从最先获得的任何包含路径中提取它。这可能是也可能不是您期望从其中读取文件的包含路径,这就是为什么我从来不依赖于该设置,只需绝对指定所有my。来自手册
PHP在查找要包含的文件时分别考虑包含路径中的每个条目。它将检查第一条路径,如果找不到,就检查下一条路径,直到它找到包含的文件,或者带警告或错误返回。
(将我的评论作为答复在这里重新发布,并对其进行扩展,供今后参考。)
发布于 2012-05-02 06:32:37
您应该在dirname(__FILE__)中使用require_once(...)。例如,如果您有一个包含两个文件( ActiveRecord.php和DB.php )的文件夹,并且希望从ActiveRecord引用DB,请使用以下格式:
require_once(dirname(__FILE__).'/DB.php');发布于 2010-11-09 01:55:23
当然了。locate System.php
/opt/php-lib/System.php
/usr/share/php/System.php我已经更改了文件名。
https://stackoverflow.com/questions/4129783
复制相似问题