Php 注意:未定义的属性:
我收到通知:未定义属性:Page::$vars,位于第41行的C:\xampp\htdocs\mysite.local\ww.php\u classes\Page.php中。然后它显示“404的东西在这里”。每当我从导航菜单中单击时,都会收到此通知。但当我键入url mysite.local/safety_tips时,页面就会加载其内容 php代码如下所示:Php 注意:未定义的属性:,php,Php,我收到通知:未定义属性:Page::$vars,位于第41行的C:\xampp\htdocs\mysite.local\ww.php\u classes\Page.php中。然后它显示“404的东西在这里”。每当我从导航菜单中单击时,都会收到此通知。但当我键入url mysite.local/safety_tips时,页面就会加载其内容 php代码如下所示: <?php class Page{ static $instances = array(); static $ins
<?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];
}
}
此测试错误:
if(!$this->vars)$this->vars='{}';
使用:
请花点时间返回并编辑代码中的缩进。我们当中很少有人会花时间去尝试理解一大块密集的、未注释的、未插入的代码。Thx Mike W。通知已经不见了。但另一个问题仍然存在。我认为问题在于我之前发布的第二组代码(索引/主页代码)。那些代码是缩进的。我试图在页面名称或特殊(0是特殊的,指向打开索引/主页,1是正常/默认)时获取当前页面id。然后,is应该根据id显示表行中的内容。当我键入url时会发生这种情况,但当我通过单击导航菜单打开url时会显示false(这里是404)。有人能帮我吗?
if(!$this->vars)$this->vars='{}';
if(!isset($this->vars)) $this->vars='{}';