Fehlermeldung Strenge Standards: Nicht-statische Methode sollte nicht statisch in PHP aufgerufen werden

Lesezeit: 5 Minuten

Fehlermeldung Strenge Standards Nicht statische Methode sollte nicht statisch in PHP
Schienbein

Ich habe folgende php. Wenn ich jedoch die index.php sehe, erhalte ich die folgende Fehlermeldung.

Strenge Standards: Nicht-statische Methode Page::getInstanceByName() sollte nicht statisch in /var/www/webworks/index.php in Zeile 12 aufgerufen werden

Ich hoffe jemand kann mir sagen wie ich das Problem beheben kann.

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';
    }
}
...
...

Seite.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");
        }
        else return false;
        if(!count($r || !is_array($r)))return false;
        if(!isset($r['id']))$r['id']=0;
        if(!isset($r['type']))$r['type']=0;
        if(!isset($r['special']))$r['special']=0;
        if(!isset($r['name']))$r['name']='NO NAME SUPPLIED';
        foreach ($r as $k=>$v) $this->{$k}=$v;
        $this->urlname=$r['name'];
        $this->dbVals=$r;
        self::$instances[$this->id] =& $this;
        self::$instancesByName[preg_replace('/[^a-z0-9]/','-',strtolower($this->urlname))] =& $this;
        self::$instancesBySpecial[$this->special] =& $this;
        if(!$this->vars)$this->vars="{}";
        $this->vars=json_decode($this->vars);
    }
    function getInstance($id=0,$fromRow=false,$pvq=false){
        if (!is_numeric($id)) return false;
        if ([email protected]_key_exists($id,self::$instances)) self::$instances[$id]=new Page($id,0,$fromRow,$pvq);
        return self::$instances[$id];
    }
    function getInstanceByName($name=""){
        $name=strtolower($name);
        $nameIndex=preg_replace('#[^a-z0-9/]#','-',$name);
        if(@array_key_exists($nameIndex,self::$instancesByName))return self::$instancesByName[$nameIndex];
        self::$instancesByName[$nameIndex]=new Page($name,1);
        return self::$instancesByName[$nameIndex];
    }
    function getInstanceBySpecial($sp=0){
        if (!is_numeric($sp)) return false;
        if ([email protected]_key_exists($sp,$instancesBySpecial)) $instancesBySpecial[$sp]=new Page($sp,3);
        return $instancesBySpecial[$sp];
    }

  • Hmm, könnte es sein, dass Sie eine Methode statisch aufrufen und diese Methode nicht als statisch definiert ist? Weißt du, ziemlich genau, was der Fehler sagt, in der Zeilennummer heißt es …

    – Harold1983-

    13. Januar 2011 um 19:48 Uhr

1646464447 7 Fehlermeldung Strenge Standards Nicht statische Methode sollte nicht statisch in PHP
Gordon

Ihren Methoden fehlt das static Stichwort. Ändern

function getInstanceByName($name=""){

zu

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

wenn Sie sie statisch aufrufen möchten.

Beachten Sie, dass statische Methoden (und Singletons) sind Tod bis zur Prüfbarkeit.

Beachten Sie auch, dass Sie viel zu viel Arbeit im Konstruktor leisten, insbesondere all die Abfragen sollten nicht darin enthalten sein. Alles, was Ihr Konstruktor tun soll, ist, das Objekt in einen gültigen Zustand zu versetzen. Wenn Sie dazu Daten von außerhalb der Klasse benötigen, sollten Sie sie injizieren, anstatt sie zu ziehen. Beachten Sie auch, dass Konstruktoren nichts zurückgeben können. Sie werden immer leer zurückkehren, also all dies return false Anweisungen bewirken nichts anderes, als die Konstruktion zu beenden.

  • Die Codes sind aus diesem Buch…packtpub.com/cms-design-using-php-and-jquery/book. Ich finde, du solltest ein Buch schreiben, Gordon. 🙂

    – Schienbein

    13. Januar 2011 um 20:00 Uhr

  • @shin Nee, ich würde nur wiederholen, was andere vorher besser gesagt haben als ich. Aber das ist ein wirklich schlechter Code für ein Buch, das im Dezember 2010 veröffentlicht wurde. Geben sie einen Grund dafür, Sichtbarkeitsschlüsselwörter wegzulassen oder die PEAR-Codierungskonvention nicht zu befolgen? Hoffen wir, dass die jQuery- und allgemeine CMS-Architektur solider ist.

    – Gordon

    13. Januar 2011 um 20:26 Uhr

  • @dzona, das würde die Probleme mit dem Code ignorieren und ihn nicht beheben.

    – Gordon

    4. Dezember 2013 um 6:10 Uhr

  • Wichtiger Hinweis: die public Das Schlüsselwort wird nur in Funktions-/Variablendeklarationen innerhalb einer Klasse verwendet. Siehe stackoverflow.com/questions/13341378/…

    – cssyphos

    6. Februar 2015 um 18:17 Uhr


  • @Gordon, nur neugierig – warum plädieren Sie dafür, die beleidigende Methode zu ändern staticanstatt den zu verwendenden Code (neu) zu schreiben $p = new Page(); $p->getInstanceByName();?

    – Denis

    13. Juli 2016 um 18:35 Uhr


1646464447 632 Fehlermeldung Strenge Standards Nicht statische Methode sollte nicht statisch in PHP
Erbse

Ich denke, das könnte deine Frage beantworten.

Nicht statische Methode ….. sollte nicht statisch aufgerufen werden

Wenn die Methode nicht statisch ist, müssen Sie sie wie folgt initialisieren:

$var = new ClassName();
$var->method();

Oder Sie können in PHP 5.4+ diese Syntax verwenden:

(new ClassName)->method();

  • Ist (neuer Klassenname)->method(); auch mit PHP 5.3 kompatibel?

    – Jeff

    22. März 2016 um 1:20 Uhr


  • @Jeff, würde ich verwenden (new ClassName())->method();und ich glaube, es ist mit PHP von 5 bis 7 kompatibel

    – Denis

    13. Juli 2016 um 20:01 Uhr

  • (new ClassName)->method(); ist nicht mit PHP 5.3 kompatibel. Ich habe es gerade versucht.

    – Sonny

    24. Januar 2017 um 16:13 Uhr


1646464448 251 Fehlermeldung Strenge Standards Nicht statische Methode sollte nicht statisch in PHP
Ravi Krishnan

Wenn die Bereichsauflösung :: außerhalb der Klasse verwendet werden musste, sollte die entsprechende Funktion oder Variable als statisch deklariert werden

class Foo { 
        //Static variable 
        public static $static_var="static variable"; 
        //Static function 
        static function staticValue() { return 'static function'; } 

        //function 
        function Value() { return 'Object'; } 
} 



 echo Foo::$static_var . "<br/>"; echo Foo::staticValue(). "<br/>"; $foo = new Foo(); echo $foo->Value();

  • Können Sie Beispiele für das OP und alle zukünftigen Besucher geben?

    – B001ᛦ

    23. August 2016 um 11:47 Uhr

  • “; echo Foo::staticValue(). “
    “; $foo = neues Foo(); echo $foo->Wert(); /*Hoffe, dieses Beispiel hilft dir*/

    – Ravi Krishnan

    23. August 2016 um 13:08 Uhr


Fehlermeldung Strenge Standards Nicht statische Methode sollte nicht statisch in PHP
Andrés Frias

Versuche dies:

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

Bei mir hat es in einem ähnlichen Fall funktioniert.

benutze Klassenname->Funktion(); stattdessen className::function() ;

1646464449 773 Fehlermeldung Strenge Standards Nicht statische Methode sollte nicht statisch in PHP
Bo Persson

return false ist normalerweise dazu gedacht, die Objekterstellung mit einem Fehler zu beenden. So einfach ist das.

1646464450 329 Fehlermeldung Strenge Standards Nicht statische Methode sollte nicht statisch in PHP
Rashwan L

Anstatt die Instanz mit dem Bereichsauflösungsoperator :: zu verwenden, da sie nicht als statische Funktion definiert wurde.

$r=Page::getInstanceByName($page);

ändere es zu:

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

Und es wird wie ein Zauber funktionieren.

943540cookie-checkFehlermeldung Strenge Standards: Nicht-statische Methode sollte nicht statisch in PHP aufgerufen werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy