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

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;
}

PHP程序设计的更多相关文章

  1. HTML5 程序设计 - 使用HTML5 Canvas API

    请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方 ...

  2. 解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计

    ERP系统的单据具备标准的功能,这里的单据可翻译为Bill,Document,Entry,具备相似的工具条操作界面.通过设计可复用的基类,子类只需要继承基类窗体即可完成单据功能的程序设计.先看标准的销 ...

  3. java基础学习03(java基础程序设计)

    java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...

  4. CWMP开源代码研究5——CWMP程序设计思想

    声明:本文涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅号:408797506) 本文介绍自己用过的ACS,其中包括开源版(提供下载包)和商业版(仅提供安装包下载 ...

  5. 《JavaScript高级程序设计(第3版)》笔记-序

    很少看书,不喜欢看书,主要是上学时总坐不住,没有多大定性,一本书可以两天看完,随便翻翻,也可以丢在角落里几个月不去动一下. 上次碰到了<JavaScript高级程序设计(第3版)>感觉真的 ...

  6. 《JavaScript高级程序设计(第3版)》阅读总结记录第一章之JavaScript简介

    前言: 为什么会想到把<JavaScript 高级程序设计(第 3 版)>总结记录呢,之前写过一篇博客,研究的轮播效果,后来又去看了<JavaScript 高级程序设计(第3版)&g ...

  7. 【实战Java高并发程序设计 7】让线程之间互相帮助--SynchronousQueue的实现

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  8. 【实战Java高并发程序设计6】挑战无锁算法:无锁的Vector实现

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  9. 【实战Java高并发程序设计 5】让普通变量也享受原子操作

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  10. 【实战Java高并发程序设计 4】数组也能无锁:AtomicIntegerArray

    除了提供基本数据类型外,JDK还为我们准备了数组等复合结构.当前可用的原子数组有:AtomicIntegerArray.AtomicLongArray和AtomicReferenceArray,分别表 ...

随机推荐

  1. 自定义圆形控件 RoundImageView

    1.自定义圆形控件 RoundImageView package com.ronye.CustomView; import android.content.Context; import androi ...

  2. [Android] android .keystore文件转x509pem工具

    .keystore是android的签名文件,最近在做联通联运的时候,发现他们需要上传x509pem格式的文件来签名所以就研究了一下如何转化 方法一:使用openssl的方法 http://blog. ...

  3. 最新GHOST XP系统安全稳定版 V2016年

    来自系统妈:http://www.xitongma.com 电脑公司GHOST xp系统经典优化版 V2016年4月 系统概述 电脑公司ghost xp系统经典优化版集成最常用的装机软件,集成最全面的 ...

  4. vs2012中EF6的BUG

    BUG不怕,只要开源 1.无主键表序列化时会自动将所有非空列均设为主键列 Creating table -- Creating table 't_b_Camera' CREATE TABLE [dbo ...

  5. Android中的单例模式

    定义: 单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 使用场景: 确保某一个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有一 ...

  6. Win7家庭组的使用

    Win7中有两种方式与他人共享文件,一种是“家庭组”,另一种是使用“工作组或域”. 家庭组是Win7中新增的一种共享文件方式,在传统的共享文件方式中必须手动设置所要共享的文件夹,而家庭组则不需要,只需 ...

  7. JSP与Servelt的区别

    相同点: 两者都是服务端的技术,而JSP本质上就是Servelt: 都可以处理来自客户端的请求,都可以对请求作出响应: 都可以生成HTML页面返回. 不同点: 在实际开发中,对JSP编程成响应的HTM ...

  8. mysql-3 检索数据(1)

    SELECT 语句 SELECT检索表数据,必须至少给出两条信息--------想选择什么,以及从什么地方选择. 检索一个列 SELECT prod_name FROM products; 上述语句利 ...

  9. Oracle索引梳理系列(二)- Oracle索引种类及B树索引

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  10. my_atoi()

    void my_atoi(const char* s){ int i=0,res=0; if(*s<='9' && *s>='0'){ //如果输入的一个字符是数字 for ...