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

我收到通知:未定义属性: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 $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='{}';