猿问

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

我有以下php。但是,当我看到index.php时,出现以下错误消息。


严格的标准:非静态方法Page :: getInstanceByName()不应在第12行的/var/www/webworks/index.php中被静态调用


我希望有人可以告诉我如何解决该问题。


提前致谢。


index.php


// { common variables and functions

include_once('ww.incs/common.php');

$page=isset($_REQUEST['page'])?$_REQUEST['page']:'';

$id=isset($_REQUEST['id'])?(int)$_REQUEST['id']:0;

...


// { get current page id

if(!$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 data

if($id){

    $PAGEDATA=(isset($r) && $r)?$r : Page::getInstance($id);

}

else{

    echo '404 thing goes here';

    exit;

}

...

...

ww.incs / common.php


<?php

require dirname(__FILE__).'/basics.php';

...

...

ww.incs / basics.php


session_start();

if(!function_exists('__autoload')){

    function __autoload($name) {

        require $name . '.php';

    }

}

...

...

Page.php


class 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");

        }

万千封印
浏览 857回答 4
4回答

元芳怎么了

您的方法缺少static关键字。更改function getInstanceByName($name=''){至public static function getInstanceByName($name=''){如果要静态调用它们。请注意,静态方法(和Singletons)是可测试性的牺牲品。还要注意,您在构造函数中做的工作太多了,尤其是所有查询都不应放在其中。您的构造函数应该做的就是将对象设置为有效状态。如果您必须从类外部获取数据,请考虑注入数据而不是提取数据。另请注意,构造函数无法返回任何内容。它们将始终返回void,因此所有这些return false语句都只会终止构造。

撒科打诨

我认为这可以回答您的问题。非静态方法.....不应静态调用如果该方法不是静态的,则需要像这样进行初始化:$var = new ClassName();$var->method();或者,在PHP 5.4+中,您可以使用以下语法:(new ClassName)->method();

千万里不及你

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

倚天杖

尝试这个:$r = Page()->getInstanceByName($page);在类似情况下,它对我有用。
随时随地看视频慕课网APP
我要回答