PHP程序设计

① 在设计评论系统时,关于文章的一些属性,我们最好存放在一个内存缓存中,通过下面的设计每次仅需要查询一次即可获取文章的所有属性

class CommentsDoc{

    private static $docStatusArray=array();

    public function getDoc($docUrl){
        $info=self::$docStatusArray[$docUrl];
        if(!$info){
            if($value=$this->memcache->get($docUl);){
                $info=explode('_', $value);        //第一个元素表述是否允许评论,第二个标示是否需要审核,第三个表示是否允许支持反对
            }else{
                $info=array(1,-1,1);
            }
            self::$docStatusArray[$docUrl]=$info;
        }
        return $info;
    }
}

 ② 获取$_POST、$_GET、$_COOKIE这些全局变量,时都要使用$_GET['variable']这样去获取(register_globals=Off),有时候感觉很麻烦,所以可以在入口文件中加上这样的代码,那么request的变量就可以直接使用了

//request得到的变量过滤后直接使用
foreach ( array ('_COOKIE', '_POST', '_GET' ) as $_request ) {
        foreach ( $$_request as $_key => $_value ) {
                $_key {0} != '_' && $$_key = get_magic_quotes_gpc() ? $_value : addslashes($_value);
        }
}

 ③ 分类

<?php

try{
    $db=new PDO('mysql:host=localhost;dbname=test','root','');
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    $smt=$db->query('select * from tree');
    $result=$smt->fetchAll(PDO::FETCH_ASSOC);
}catch(PDOExcption $e){
    echo $e->getMessage();
}

function arrayToTree($array){
    $result=array();
    $index=array();
    foreach ($array as $key => $value) {
        if($value['pid']==0){
            $i=count($result);
            $result[$i]=$value;
            $index[$value['id']]=&$result[$i];
        }else{
            !isset($index[$value['pid']]['child']) && $index[$value['pid']]['child']=array();
            $i=count($index[$value['pid']]['child']);
            $index[$value['pid']]['child'][$i]=$value;
            $index[$value['id']]=&$index[$value['pid']]['child'][$i];
        }
    }
    return $result;
}

function toList($array,$header=''){
    static $result=array();
    foreach ($array as $key => $value) {
        $result[]=$header.$value['title'];
        if(isset($value['child'])) toList($value['child'],$header.'|__');
    }
    return $result;
}

print_r(toList(arrayToTree($result)));

?>

 ④ 

class RecursiveFileFilterIterator extends FilterIterator {
    // 满足条件的扩展名
    protected $ext = array('jpg','gif');
 
    /**
     * 提供 $path 并生成对应的目录迭代器
     */
    public function __construct($path) {
        parent::__construct(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)));
    }
 
    /**
     * 检查文件扩展名是否满足条件
     */
    public function accept() {
        $item = $this->getInnerIterator();
        if ($item->isFile() && 
                in_array(pathinfo($item->getFilename(), PATHINFO_EXTENSION), $this->ext)) {
            return TRUE;
        }
    }
}
 
// 实例化
foreach (new RecursiveFileFilterIterator('/path/to/something') as $item) {
    echo $item . PHP_EOL;
}

 ⑥ 做接口时,压缩输出字符串还是挺不错的

header('Content-Encoding:'.checkCanGzip());
print ( "\x1f\x8b\x08\x00\x00\x00\x00\x00" );
echo $gz=gzcompress('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',5);

function checkCanGzip() {
    $HTTP_ACCEPT_ENCODING = $_SERVER ['HTTP_ACCEPT_ENCODING'];
    if (headers_sent ())
        return 0;
    if (strpos ( $HTTP_ACCEPT_ENCODING, 'x-gzip' ) !== false)
        return "x-gzip";
    if (strpos ( $HTTP_ACCEPT_ENCODING, 'gzip' ) !== false)
        return "gzip";
    return 0;

}

 ⑦ 程序由同步变为异步

⑧ 定义一个schema来验证数组的正确性

    /**
     * 利用schema验证返回数据
     * @param array $data
     * @param array $schema
     * @return boolean
     */
    function _checkBySchema($data, $schema) {
        if (!is_array($schema)) {
            return false;
        }
        foreach ($schema as $sk => $sv) {
            if (is_array($sv)) {
                if (!isset($data[$sk]) || !is_array($data[$sk])) {
                    return false;
                } else {
                    if (false === $this->_checkBySchema($data[$sk], $sv)) {
                        return false;
                    }
                }
            } else {
                if (!isset($data[$sv]) || empty($data[$sv])) {
                    return false;
                }
            }
        }
        return true;
    }

 

转载于:https://www.cnblogs.com/bai-jimmy/p/3423093.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值