php 的代码看不懂怎么破

2014-12-16 15:06:40 +08:00
 jacob

静态方法,引用传递,正则替换,还有用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];
    }
}
4536 次点击
所在节点    问与答
29 条回复
66beta
2014-12-16 17:41:44 +08:00
"select * from pages where special&$v limit 1"
第一次见这个SQL查询方法,学习了
难道special里面存的就是id?
sampeng
2014-12-16 19:26:27 +08:00
人家都给了你注释。。这很好读啊。。。
sampeng
2014-12-16 19:29:10 +08:00
除了没空格。。
lygmqkl
2014-12-16 20:25:07 +08:00
这种代码风格不可取。。。

可读性太差。。。虽然我能看得懂。
kevinroot
2014-12-16 21:53:34 +08:00
@jacob 那个奇葩的写法就是a and b,不是什么位运算
kevinroot
2014-12-16 21:55:12 +08:00
@lygmqkl 确实也不规范 if 大括号也没有
blakefan
2014-12-16 22:51:43 +08:00
@tini8 赞同极了,正在接收烂摊子
ivanlw
2014-12-17 05:31:59 +08:00
这个格式看起来好清爽,请问用什么实现解析的呢?
jacob
2014-12-18 11:49:25 +08:00
@ivanlw v2的帖子编辑时可以选择markdown.发帖时没有,很奇怪.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/154335

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX