Autor Zpráva
návštěvník
Profil *
Můžete mi poradit jak opravit tento skript?

http://emp.wz.cz/htconfig/download.html

Strict Standards: Non-static method Session::getId() should not be called statically...

Spouštím to na serveru s php 5.0 respektive (PHP 5.4, 5.3 nebo 5.2 nevím co tam přesně běží) ale bylo to vytvořeno na 4.3.0 .

Na localhostu s 5.2.1 mi to funguje.
Kubo2
Profil
Text hlášky sa myslím vyjadruje celkom jasne. Navyše toto nie je chyba, iba poznámka k tomu, že skript by šiel napísať lepšie.
Joker
Profil
návštěvník:
Můžete mi poradit jak opravit tento skript?
Jako že přehrabat se tou tunou neformátovaného PHP kódu? Ani ne.

Ale to upozornění se týká toho, že pro nestatické metody (ty co nemají static) se nemá používat operátor :: (s nádherným názvem „pámajim nekudotajim“), tj. místo přes Třída::metoda() se mají volat přes $instance->metoda().

Na localhostu s 5.2.1 mi to funguje.
Spíš tam jen jsou vypnutá chybová hlášení úrovně Strict.
návštěvník
Profil *
Joker:
Zkoušel jsem tam doplnit static před ty metody. Hlášky už to nehází ale taky to nejede na tom serveru (moxo). Tak nevím co dělám špatně. Asi je to těma vypnutýma hláškama na mém serveru že mi to na localhostu jede
Alphard
Profil
static nejde „jen tak“ doplnit, dané metody musí být psané tak, aby mohly fungovat staticky, tj. především musí další metody volat staticky a používat jen statické proměnné (nemělo by se v nich objevit $this). Tím nehezkým kódem se prohrabávat nebudu, možná by ale bylo řešení vytvořit si instanci té třídy (new Trida) a pracovat s ní.
návštěvník
Profil *
Asi to vzdám. Je to šílené vyznat se v tom.

třída class Session obsahuje statický přístup k sobě samé:

if(Session::__checkLockFile())
a pak to pokračuje a je tam
$this->logged=true;
Což mi přijde nějaký divný. Když bych z toho udělal instanci tak bych musel nejspíš toto Session:: nahradit instancí $Session->...

škoda že to nejede jinak by to byl užitečný skript
SwimX
Profil
návštěvník
statický přístup k sobě samé není problém, to běžně používá, příklad:
class Select {

  public static $options = array ( "A", "B" );
  
  public function get ( $id ) {
    return Select::$options [ $id ];
  }

}
Znamená to, že options budou stejné ve všech instancích třídy select, takže se nebudou zbytečně zakládat pole options při tisících instancích třídy Select.

Takže to co popisuješ problém být vůbec nemusí. Pokud ti vadí jen ta chybová hláška, tak si ji vypni :-)
error_reporting(E_ALL ^ E_STRICT);
nebo vypni vše
error_reporting(0);

Problémy to celkem příjemně odkládá, ale moc neřeší.
návštěvník
Profil *
SwimX:
Díky! Tys to konečně vyřešil! Supr. Už to jede
SwimX
Profil
návštěvník:
„vyřešil“ bych tomu neříkal :-) Jak jsem psal, problémy to příjemně odkládá, neřeší.
Tori
Profil
návštěvník:
Zkoušel jsem tam doplnit static před ty metody.
Asi jste to doplňoval jinam, je potřeba to dát jen na konec toho obludného řádku 260: {Session::__killSession();}static function getId(){return$_SESSION['id'];}
návštěvník
Profil *
Tori:
Tobě to jelo? Já to zkoušel dát k mnoha metodám, ale nakonec to nejelo právě z toho důvodu, že u přihlašování se pracuje s ukládáním dat v instanci (this v metodě). Takže asi by tam měla být ta instance, ale proč se tím vůbec zabývat, když stačilo vypnout chybové hlášky...
Tori
Profil
návštěvník:
Nespouštěla jsem to, ale v kódu to vypadalo, že ta metoda je volaná jen dvakrát a v obou případech staticky, takže proto.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: