静态方法,引用传递,正则替换,还有用0,1,2,3表示页面类型…..我真的看蒙圈了,
<?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];
    }
}
|      1em70      2014-12-16 15:34:11 +08:00 via Android 自己一行一行读,加上注释 | 
|  |      2mahone3297      2014-12-16 15:58:07 +08:00 一共也没几行,慢慢啃吧。。。 | 
|  |      3yangxiongwei      2014-12-16 15:59:56 +08:00 共也没几行,仔细读吧。 例外PHP是最好的语言。 | 
|  |      4kevinroot      2014-12-16 16:01:15 +08:00 那么问题来了,哪里看不懂 | 
|  |      5jacob OP 多说要慢慢读,可是真的有点读不来了,虽说没多少,可是包含的知识真不少.还得分别从基础搞起. | 
|  |      6zgk      2014-12-16 16:18:51 +08:00 via Android 慢慢加注释 | 
|      7tini8      2014-12-16 16:19:34 +08:00 看不懂正常,高手看别人的代码也头疼 | 
|  |      8Paranoid      2014-12-16 16:27:03 +08:00 只能跟你说,只要不是自己敲出来的代码,都是一坨屎!!!!! | 
|  |      9anewg      2014-12-16 16:27:49 +08:00 格式整理下再读吧。。。 | 
|  |      10xidianlz      2014-12-16 16:28:05 +08:00 小黄鸭调试法 | 
|  |      13jacob OP @kevinroot  构造函数里的pvq参数的作用,最看不懂的是这个 else if ($byField == 3 && is_numeric($v)){ // by special $fname='page_by_special_'.$v; $r=dbRow("select * from pages where special&$v limit 1"); } special是bigint 字段,代表页面的类型. special&$v 按位与 完全不懂这样做的目的和效果. | 
|  |      14tmkook PRO  1 干嘛要看懂?有什么需求慢慢调试啊。 | 
|      15tini8      2014-12-16 17:25:35 +08:00 @tmkook 对头,顺藤摸瓜是很重要的能力,特别是接受别人烂摊子的时候(话说别人的摊子没有不烂的),这种能力从书本上学不到,就像善用搜索的能力。 像看书一样看别人的代码根本行不通,一个几千行的文件足够把人看晕了。 | 
|  |      16wesley      2014-12-16 17:26:42 +08:00 special&$v 按位与 ============ 你理解成SQL中的 a AND b就可以了 | 
|  |      17wesley      2014-12-16 17:29:36 +08:00 special&$v我解释错了。。。。 另外pvq这参数似乎没用上吧 | 
|  |      19members      2014-12-16 17:32:57 +08:00 via Android 难道只有我每次都想把别人的代码读懂→_→ | 
|  |      20jacob OP | 
|  |      2166beta      2014-12-16 17:41:44 +08:00 "select * from pages where special&$v limit 1" 第一次见这个SQL查询方法,学习了 难道special里面存的就是id? | 
|      22sampeng      2014-12-16 19:26:27 +08:00 人家都给了你注释。。这很好读啊。。。 | 
|      23sampeng      2014-12-16 19:29:10 +08:00 除了没空格。。 | 
|  |      24lygmqkl      2014-12-16 20:25:07 +08:00 这种代码风格不可取。。。 可读性太差。。。虽然我能看得懂。 | 
|  |      28ivanlw      2014-12-17 05:31:59 +08:00 这个格式看起来好清爽,请问用什么实现解析的呢? |