uchome是个sns系统,但也是拥有深厚php技术积累的康盛公司的商业产品,本身有许多值得学习的地方,你可以用它来架设垂直的sns网站,也可以学习他的一些技巧,提高自己的代码水平,改善代码质量。
对于php开发而言,轻量的东西总是受青睐,cake,zend framework这些框架虽然很好,但是对于规模比较小的系统而言,还是过了些,利用从uchome里裁剪出来的东西,就能用简单适度的方式把系统做得足够好。
uchome的整个结构很简单,虽然也是mvc的模式,但严格来讲,并没有自己实现一套model,直接用数据库返回的对象,view是通过自己实现的一套模板方法来做到功能代码和界面设计的分离。
uchome的框架比较核心的几个文件:
source/function_common.php
提供常用的函数,例如获取post过来的字符串,获取用户身份,插入数据,更新数据,日志,模板调用接口,其中getstr,insertable,updatetable几个函数非常实用和方便。
看看gestr的函数参数;
function getstr($string, $length, $in_slashes=0, $out_slashes=0, $censor=0, $bbcode=0, $html=0)
截取字符串,转义字符,html化,bbcode都在里面
插入和更新数据的方式也非常简单,不用你自己拼接sql,以插入数据为例:
function inserttable($tablename, $insertsqlarr, $returnid=0, $replace = false)
我们插入员工信息,则可以这样写:
inserttable('staffs',array('name'=>'hankshuang','post'=>'de','age'=>25),1)
source/function_template.php
模板函数文件,提供模板文件的解析方法,被function_common文件中的template调用,将template目录下xxx.htm文件解析成xxx.php文件,将模板语法<!--{if $staffid}--><!--{/if}-->的代码转义为<?php if ($staffid) {?><?php } ?>,用 loop 来指代 foreach,解析的代码也不复杂,有兴趣可以仔细阅读下function_template.php文件里的parse_template方法,都是调用preg_replace进行正则表达式替换,通过这种方式,你就不用去编写混杂着<?php 和html的代码了,眼不见为净。性能的提高?交给下面的cache吧
source/function_cache.php
提供缓存的写入和更新,最重要的方法就是cache_write方法,看看声明:
function cache_write($name, $var, $values)
如果我想把员工数据缓存起来,那么对于$staff = array('name'=>'hankshuang','age'=>25)
就调用方法
cache_write('staffcache','staff',$staff)
下次想用这个内容的话,直接include data目录下的这个data_staffcache.php文件,就得到$staff这个对象了,原理简单,用起来却很方便.
有这三个文件,就足够你打造一个快速实用的系统了,当然uchome里还有一些非常好用的函数,比如图像处理,邮件发送,定时任务这些,设计都很巧妙,对于提高php开发技能很有帮助。

UCHome风格模版 框架核心代码提取相关推荐

  1. Java 线程池框架核心代码分析

    转载自 Java 线程池框架核心代码分析 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的.线程池应运而生,成为我们管理线程的利器.Java 通过Executo ...

  2. Java 线程池框架核心代码分析--转

    原文地址:http://www.codeceo.com/article/java-thread-pool-kernal.html 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和 ...

  3. Java线程池框架核心代码分析

    前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的.线程池应运而生,成为我们管理线程的利器.Java 通过Executor接口,提供了一种标准的方法将任务的提交过 ...

  4. DeamNet代码学习||网络框架核心代码 逐句查找学习

    目录 DeamNet网络架构图 1.  定义各种类(class) 2.  定义编码-解码块 3. DEAM 模块和 NLO子网络 4. 图像域转换与逆转换 5. 整体DeamNet DeamNet网络 ...

  5. AlexNet模型思想详解及核心代码实现

    摘要 AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的.也是在那年之后,更多更深的神经网络被提出,网络开始往深水区涉入,比如优秀的vg ...

  6. android代码 IMEI,Android_Android中获取IMEI码的方法,核心代码:Imei = ((TelephonyManager) - phpStudy...

    Android中获取IMEI码的方法 核心代码:Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)) .getDeviceId ...

  7. 图像超分综述:超长文一网打尽图像超分的前世今生 (附核心代码)

    文章目录 一.目的 二.研究背景 三.存在的问题 四.研究现状 五.各算法创新点及核心代码总结 SRCNN ESPCN VDSR DRCN DRRN EDSR SRGAN ESRGAN RDN WDS ...

  8. 火影推荐程序连载23-Robot Framework自动化测试框架核心指南-如何做好自动化测试平台框架的设计

    自动化测试如果需要能高效快速的支撑软件项目的测试,项目的快速迭代以及上线,除了以上我们介绍的需要许多的Lib来支持以及需要高效的去编写自动化测试案例外,还需要一个好的自动化测试框架平台来支撑我们的自动 ...

  9. Sg.js框架核心概念

    Sg.js框架核心概念: 1)所有变量.方法.类对象全部都是从属于$g主树,由$g分支出很多$g.变量名.$g.方法.$g.对象id.$g.类: 2)获取控件内部属性必须使用公开的get方法获取,禁止 ...

最新文章

  1. Lync Server 2010标准版系列PART1:基础构建
  2. 【Python】Time库的使用(含实例)
  3. 每天一道LeetCode-----生成由[1 : n]这n个数组成的所有二叉搜索树
  4. leetcode 239. Sliding Window Maximum | 239. 滑动窗口最大值(单调栈,窗口内最大最小值更新结构)
  5. git fatal:HttpRequestException encountered
  6. C++--day05
  7. 40年技术发展变革,物联网行业的趋势、现状与挑战
  8. java.lang.IllegalArgumentException: An invalid domain [.test.com] was specified for this cookie解决方法
  9. 用户自增长机制(一图胜千言)
  10. 多标签分类与BCELoss
  11. bzoj 1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
  12. java获取取得Timestamp类型的当前系统时间
  13. FullCalendar - 开源的多功能 JavaScript 日历插件
  14. SIM868调试日志
  15. defined 用法
  16. word实现奇数页页眉用本章标题,偶数页用论文标题
  17. 西工大机考《 合同法》大作业网考
  18. photoshop抠图与相框的制作
  19. 联想win10专业版64位简体中文原版光盘镜像
  20. 12-Azido-1-dodecanol,57395-51-4,12-叠氮-1-十二醇点击化学试剂结构式分析

热门文章

  1. 2018深度学习十大趋势:元学习成新SGD,多数硬件创企将失败
  2. 前端小白程序员入门之前知道这些,半年后都拿到8K+的offer
  3. WindowsXP下搭建GIT服务器
  4. hive-metastore
  5. PHP新的连接MySQL方法mysqli
  6. 仿新浪微盾客户端项目简介四
  7. hystrix文档翻译之metrics
  8. 企业CRM项目实施调研内容有那些?
  9. 苹果证实将弃用Windows版QuickTime
  10. C#编程(二十五)----------接口