Hata iletisi standartları: Non-statik yöntem çağrılmalıdır değil statik olarak php
Aşağıdaki php var. Aşağıdaki hata iletisini alıyorum index.php gördüğümde ancak.
Strict standards: Non-statik yöntem ::Sayfa getİnstanceByName() olmamalı statik olarak çağrılacak satırında /var/www/webworks/index.php 12
Birisi bu sorunu çözmek için nasıl bana söyleyebilir umuyorum.
Şimdiden teşekkürler.
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");
}
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 (!@array_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 (!@array_key_exists($sp,$instancesBySpecial)) $instancesBySpecial[$sp]=new Page($sp,3);
return $instancesBySpecial[$sp];
}
CEVAP
Yöntemleri static
keyword eksik. Değiştirin
function getInstanceByName($name=''){
için
public static function getInstanceByName($name=''){
onları statik olarak aramak istiyorsanız.
Statik yöntemler (Singletons) death to testability olduğunu unutmayın.
Ayrıca yapıcı, tüm bu sorgulama özellikle çok fazla çalışma yok olmamalı yolu yapıyorsun unutmayın. Sizin yapıcı yapması gereken tek şey geçerli bir duruma nesne ayarlanır. Eğer sınıfın dışından veri varsa o enjekte çekerek yerine düşünün. Ayrıca kurucular bu, hiçbir şeyle geri unutmayın. Her zaman return false
tüm bu açıklamalar hiçbir şey ama son inşaat yapmak void geri dönecekler.
Neden yok C# statik bir yöntem bir örn...
Neden Java statik olarak bir sınıf bil...
Yöntem statik yapılabilir ama değil mi...
Neden statik bir yöntem olarak kabul e...
Statik bir yöntem olarak ilan kazancı ...