为了账号安全,请及时绑定邮箱和手机立即绑定

错误消息严格的标准:非静态方法不应在php中静态调用

错误消息严格的标准:非静态方法不应在php中静态调用

PHP
万千封印 2019-11-14 09:41:54
我有以下php。但是,当我看到index.php时,出现以下错误消息。严格的标准:非静态方法Page :: getInstanceByName()不应在第12行的/var/www/webworks/index.php中被静态调用我希望有人可以告诉我如何解决该问题。提前致谢。index.php// { common variables and functionsinclude_once('ww.incs/common.php');$page=isset($_REQUEST['page'])?$_REQUEST['page']:'';$id=isset($_REQUEST['id'])?(int)$_REQUEST['id']:0;...// { get current page idif(!$id){    if($page){ // load by name        $r=Page::getInstanceByName($page);        if($r && isset($r->id))$id=$r->id;    }    if(!$id){ // else load by special        $special=1;        if(!$page){            $r=Page::getInstanceBySpecial($special);            if($r && isset($r->id))$id=$r->id;        }    }}// { load page dataif($id){    $PAGEDATA=(isset($r) && $r)?$r : Page::getInstance($id);}else{    echo '404 thing goes here';    exit;}......ww.incs / common.php<?phprequire dirname(__FILE__).'/basics.php';......ww.incs / basics.phpsession_start();if(!function_exists('__autoload')){    function __autoload($name) {        require $name . '.php';    }}......Page.phpclass Page{    static $instances             = array();    static $instancesByName     = array();    static $instancesBySpecial   = array();    function __construct($v,$byField=0,$fromRow=0,$pvq=0){        # byField: 0=ID; 1=Name; 3=special        if (!$byField && is_numeric($v)){ // by ID            $r=$fromRow?$fromRow:($v?dbRow("select * from pages where id=$v limit 1"):array());        }        else if ($byField == 1){ // by name            $name=strtolower(str_replace('-','_',$v));            $fname='page_by_name_'.md5($name);            $r=dbRow("select * from pages where name like '".addslashes($name)."' limit 1");        }        else if ($byField == 3 && is_numeric($v)){ // by special            $fname='page_by_special_'.$v;            $r=dbRow("select * from pages where special&$v limit 1");        }
查看完整描述

4 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您的方法缺少static关键字。更改


function getInstanceByName($name=''){


public static function getInstanceByName($name=''){

如果要静态调用它们。


请注意,静态方法(和Singletons)是可测试性的牺牲品。


还要注意,您在构造函数中做的工作太多了,尤其是所有查询都不应放在其中。您的构造函数应该做的就是将对象设置为有效状态。如果您必须从类外部获取数据,请考虑注入数据而不是提取数据。另请注意,构造函数无法返回任何内容。它们将始终返回void,因此所有这些return false语句都只会终止构造。


查看完整回答
反对 回复 2019-11-14
?
撒科打诨

TA贡献1934条经验 获得超2个赞

我认为这可以回答您的问题。


非静态方法.....不应静态调用


如果该方法不是静态的,则需要像这样进行初始化:


$var = new ClassName();

$var->method();

或者,在PHP 5.4+中,您可以使用以下语法:


(new ClassName)->method();


查看完整回答
反对 回复 2019-11-14
?
千万里不及你

TA贡献1784条经验 获得超9个赞

使用className-> function(); 代替className :: function();


查看完整回答
反对 回复 2019-11-14
?
倚天杖

TA贡献1828条经验 获得超3个赞

尝试这个:


$r = Page()->getInstanceByName($page);

在类似情况下,它对我有用。


查看完整回答
反对 回复 2019-11-14
  • 4 回答
  • 0 关注
  • 856 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信