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

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. 你真的了解UIResponder吗?

    1:首先查看一下关于UIResponder的定义 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIResponder : NSObject //响应链中负责传递事件的 ...

  2. [原] Android 自定义View步骤

    例子如下:Android 自定义View 密码框 例子 1 良好的自定义View 易用,标准,开放. 一个设计良好的自定义view和其他设计良好的类很像.封装了某个具有易用性接口的功能组合,这些功能能 ...

  3. linux下安装jdk+tomcat+eclipse+mysql

    我的环境:主机是win7的,虚拟机是VWare  Workstation 6.0   ,linux系统为Red Hat Enterprise  Linux 5 64位 各软件版本:jdk是jdk-6u ...

  4. MyCat:取代Cobar数据库中间件

    什么是MyCAT?简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的“大数据库集群” 支持事务.ACID.可以替代Mysql的加强版数据库 ? 一个可以视为“Mysql”集群的企业级数据库 ...

  5. WPF学习之路(七)应用程序和窗口

    手动创建应用程序 1.创建Empty Project 2.添加引用 3.添加 ManualApp.cs 并添加下面的代码 [STAThread] public static void Main() { ...

  6. jQuery添加options点击事件并传值

    说明: 根据选择不同店铺选项,上送不同id值,展示不同商品列表   var formStr = "{'supplierId':'供应链企业|%-jm-sprt-%|93794498-3'}& ...

  7. MongoDB Java Driver

    本文使用 Java 来描述对 Mongodb 的相关操作,数据库版本是 3.2.8,驱动版本为 3.2.2. 本文将讨论 如何连接MongoDB 文档的 CURD 操作 文档的上传和下载 1. 连接到 ...

  8. git merge git pull时候遇到冲突解决办法git stash

    在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息: error: Your local changes to 'c/environ.c' would be overwritten b ...

  9. Python类属性的延迟计算

    所谓类属性的延迟计算就是将类的属性定义成一个property,只在访问的时候才会计算,而且一旦被访问后,结果将会被缓存起来,不用每次都计算. 优点 构造一个延迟计算属性的主要目的是为了提升性能 实现 ...

  10. eclipse出现的JRE运行环境错误

    adt-bundle-linux eclipse启动运行错误,提示如下: A Java RunTime Environment (JRE) or Java Development Kit (JDK) ...