我收到通知:未定义的属性:第41行的C:\ xampp \ htdocs \ mysite.local \ ww.php_classes \ Page.php中的Page :: $ vars然后它显示“404 thing goes here”。每当我点击导航菜单时,我都会收到此通知。但是当我输入url mysite.local / safety_tips时,页面会加载其内容。
page.php代码如下:
<?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];
}
}
索引/主页面代码如下:
<?php
// { common variables and functions
include_once('/ww.includes/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;
unset($r);
}
if(!$id){ // else load by special
$special=1;
if(!$page){
$r=Page::getInstanceBySpecial($special);
if($r && isset($r->id))$id=$r->id;
unset($r);
}
}
}
// }
// { load page data
if($id){
$PAGEDATA=(isset($r) && $r)? $r : Page::getInstance($id);
} else{
echo '404 thing goes here';
exit;
}
// }
echo $PAGEDATA->body;
我在哪里弄错了?
答案 0 :(得分:1)
此测试错误:
if(!$this->vars)$this->vars='{}';
使用:
if(!isset($this->vars)) $this->vars='{}';