我正在开发一个PHP Web应用程序。我使用了来自gurrido.net的新数据网格,它在本地运行良好但是当我将其上传到服务器时,我收到以下错误:
致命错误:无法使非静态方法Base :: getClassName()静态 在/var/www/reskb/phpinc/Singletons.class.php上的单身人士课堂上 第84行
在我没有使用网格的旧版本中,我得到了它的工作。这是我的singletons.class.php文件代码:
<?
class Singletons extends Base {
var $objects = array();
function getClassName() {
return 'Singletons';
}
function _instance() {
static $_instance = NULL;
if ($_instance == NULL) {
$className = Singletons::getClassName();
$_instance = new $className();
}
return $_instance;
}
function put($object) {
$self = Singletons::_instance();
$className = $object->getClassName();
$self->objects[$className] = $object;
}
function get($className) {
$self = Singletons::_instance();
if(!empty($self->objects[$className]))
return $self->objects[$className];
else return '';
}
}
Singletons::_instance();
?>
答案 0 :(得分:2)
您应该使用object调用函数getClassName或将getClassName定义为static。 -
<?php
class Singletons extends Base {
var $objects = array();
static function getClassName() {
return 'Singletons';
}
static function _instance() {
static $_instance = NULL;
if ($_instance == NULL) {
$className = Singletons::getClassName();
$_instance = new $className();
}
return $_instance;
}
function put($object) {
$self = Singletons::_instance();
$className = $object->getClassName();
$self->objects[$className] = $object;
}
function get($className) {
$self = Singletons::_instance();
if(!empty($self->objects[$className]))
return $self->objects[$className];
else return '';
}
}
Singletons::_instance();
?>
答案 1 :(得分:0)
您收到错误是因为当它不是静态方法( function )时,您试图静态调用函数。
您需要将该函数指定为static:
static function getClassName() {
return 'Singletons';
}
这适用于您希望静态调用的每种方法。
答案 2 :(得分:0)
如果在抽象超类中将函数声明为抽象,然后尝试在子类中将其定义为静态,则会出现致命错误。您可能要考虑类层次结构的构造方式,因为唯一的选择就是从超类中删除抽象函数声明。