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-Patch(cli)(内置:2010年9月17日13:49:46)
版权所有(c)1997-2009 PHP集团
Zend Engine v2.3.0,版权所有(c)1998-2010 Zend Technologies
答案 0 :(得分:3)
确保您包含正确的文件 - 可能是类文件中的某个回显,并查看它是否包含在内。如果没有回显,则表示您收到了错误的System.php
文件。
如果有一个文件与您在多个包含路径中指定的名称相匹配,那么PHP将从首先包含的任何包含路径中选择它。这可能是也可能不是您期望从中读取文件的包含路径,这就是为什么我不依赖于该设置并且只是绝对指定我的所有包含。来自manual:
在查找要包含的文件时,PHP会分别考虑包含路径中的每个条目。它将检查第一个路径,如果找不到它,请检查下一个路径,直到找到包含的文件或返回警告或错误。
(在此处将我的评论作为答案重新发布,并对其进行了扩展,以供将来参考。)
答案 1 :(得分:1)
您应该在dirname(__FILE__)
内使用require_once(...)
。例如,如果您有一个包含两个文件ActiveRecord.php和DB.php的文件夹,并且您想要从ActiveRecord引用DB,请使用以下格式:
require_once(dirname(__FILE__).'/DB.php');
答案 2 :(得分:0)
当然。 locate System.php
/opt/php-lib/System.php
/usr/share/php/System.php
我已经更改了文件名。