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

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. Unable to execute dex: Multiple dex files define(错误分析)

    eclipse工程包名与依靠的代码库包名不能冲突,否则运行程序程序会出错 错误提示:

  2. Activity与Service进行数据交互

    Android启动Service有两种方法,一种是startService,一种是bindService.生命周期如下: 执行startService时,调用者如果没有stopService,Serv ...

  3. iOS---UISearchBar限制输入字数

    - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText // called when text ...

  4. C#语言——类

    C#——类 一.String 类 系统内置的处理字符串类型的函数方法类.方便我们对字符串类型进行一系列的处理. 1.Length:获取字符串的长度,返回一个int类型的值 string x=Conso ...

  5. 优化SQLServer——表和分区索引(二)

    简介     之前一篇简单的介绍了语法和一些基本的概念,隔了一段时间,觉得有必要细致的通过实例来总结一下这部分内容.如之前所说,分区就是讲大型的对象(表)分成更小的块来管理,基本单位是行.这也就产生了 ...

  6. Java 文档注释

    Java只是三种注释方式.前两种分别是// 和/* */,第三种被称作说明注释,它以/** 开始,以 */结束. 说明注释允许你在程序中嵌入关于程序的信息.你可以使用javadoc工具软件来生成信息, ...

  7. redis安装及基础操作(1)

    ============================================================= 编译安装 0.环境 Linux:centos6.5 redis:3.0.5 ...

  8. 系统进程 zygote(一)—— 概述

    和蔼的春光,充满鸳鸯的池塘:快辞别寂寞的梦乡,来和我摸一会鱼儿,折一枝海棠.—— 徐志摩·醒!醒! ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 先看一张 ...

  9. C++类成员函数的重载、覆盖和隐藏区别?

    C++类成员函数的重载.覆盖和隐藏区别? a.成员函数被重载的特征:(1)相同的范围(在同一个类中):(2)函数名字相同:(3)参数不同:(4)virtual 关键字可有可无.b.覆盖是指派生类函数覆 ...

  10. WPF之全局快捷键

    目录 1.WPF快捷键实现方式 2.全局快捷键设置界面 3.Windows API调用 4.注册全局快捷键 5.快捷键触发 WPF快捷键实现方式 WPF快捷键实现主要有自定义快捷键命令和全局快捷键两种 ...