注意:未定义的属性:

时间:2013-11-18 01:25:30

标签: php

我收到通知:未定义的属性:第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;

我在哪里弄错了?

1 个答案:

答案 0 :(得分:1)

此测试错误:

if(!$this->vars)$this->vars='{}';

使用:

if(!isset($this->vars)) $this->vars='{}';