• 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 ( "x1fx8bx08x00x00x00x00x00" );
    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;
        }
  • 相关阅读:
    【转载】Java性能优化之JVM GC(垃圾回收机制)
    RobotFramework自动化测试框架-DatabaseLibrary库的使用(对数据库的操作)
    Linux性能分析工具top命令详解
    RobotFramework自动化测试框架-移动手机自动化测试Element Attribute Should Match关键字的使用
    RobotFramework自动化测试框架-移动手机自动化测试Get Network Connection Status和Set Network Connection Status关键字的使用
    RobotFramework自动化测试框架-移动手机自动化测试Get Element Location关键字的使用
    在linux下,怎么去查看一个运行中的程序, 到底是占用了多少内存
    RobotFramework自动化测试框架-移动手机自动化测试Click Element At Coordinates关键字的使用
    RobotFramework自动化测试框架-移动手机自动化测试Click A Point关键字的使用
    RobotFramework自动化测试框架-移动手机自动化测试Click Element关键字的使用
  • 原文地址:https://www.cnblogs.com/bai-jimmy/p/3423093.html
Copyright © 2020-2023  润新知