- 博客(20)
- 收藏
- 关注
原创 php设计模式探秘-单例模式
我们继续扩展我们的电影网站。我们准备制作一个详情页来让用户查看更加详细的电影信息。借用封装好的数据库查询,我们编写了如下代码:<?php// detail.php$movieId = isset($_GET['id']) ? $_GET['id'] : 0;if (empty($movieId)) { exit('操作非法');}$db = new Connection();$d
2017-03-07 20:29:36
181
原创 php设计模式探秘-封装
概况如何让编程变得更简单? 这里,我们尝试用“设计模式”,去解决一些复杂的逻辑问题。为了便于理解,我们先从“封装”开始逐渐引入设计模式;也为了便于理解 ,我们通篇采用一个电影网站来作为需求的背景。封装我们的电影网站,首先有一个电影列表页。它从数据库抓取多条电影数据,并通过html展示出来,代码大致如下:<?php// List.php$offset = isset($_GET['offset'
2017-03-06 18:19:53
157
原创 算法在整个编程环境中的角色
算法,总是一个很具体的事情,它通常是在解决一个特定的问题。程序员的分层和程序员的素质,程序员不光是对自己的编程环境很熟悉,还要有团队合作的一些素质,比如团队合作意识,代码质量意识,文档水平,交流水平,算法在实际工作中所占的比例不是很大,学究与生产,
2015-07-07 10:32:38
352
原创 api中的版本控制
$version = $request->getParam('versionId', true);$method = $this->methodByVersion($version, array(7, 4));$this->$method(&$request, &$response);function methodByVersion($version, array tip){ rsor
2015-07-03 16:47:51
321
原创 php基础教程
php能做什么php可以用来作网站,很多大型公司的网站再用Php做。php可以给手机应用提供服务器接口。 以.php结尾的文件中,包含在<?phpphpinfo();变量与数据类型条件判断循环函数和封装字符串数组
2015-06-18 10:12:16
267
原创 角色编程与设计模式
设计模式很多时候是一种抽象概念,并不是都必须用类,或者继承实现的。而且在php方面,很多时候设计模式用非类的方式实现,还能获得更好的可读性和代码简洁度。
2015-06-18 09:02:14
264
原创 数据访问
这里并没有采用很多引擎宣扬的级联,个人觉得把目的放最后很有问题,而且用对象相对有幸能损耗。数据访问方式DB::table(tableName)−>getAll(tableName)->getAll(condition) DB::table(tableName)−>getRow(tableName)->getRow(condition) DB::table(tableName)−>getVal(t
2015-06-16 16:32:01
269
原创 加载最少的代码start.php
在很多php引擎中,加载了很多我们其实并不需要的东西。比如做了很多环境的初始化,但我们其实只用到很少的部分。我们试图做到,一个引擎代码加载量的最小。我们可以只引入一个db库来做脚本,所以,waiterphp只需要加载start.php进行自动加载机制的绑定。关于start.phpstart.php做了三件事情,把Enreiment类的自动加载机制注册到php中、实现主动调用接口(call函数),实
2015-06-16 15:54:36
333
原创 好的接口
如何界定一个代码? 如何定义一个良好的接口?好的接口,一般都具有原子性,越原子的东西,越容易被重用,也越稳定。原子性要求功能单一。逻辑目的尽可能少。
2015-06-16 10:28:16
244
原创 从地铁闪灯看抽象与稳定性
首先程序属于渐进编程,你永远无法知道你现在做的事情将来会变成怎样。这不同于建筑。你就在自己的一亩三分地上面造房子,住宅,只局限于睡觉、用餐、看电视,当然,你也可以有游泳池,但总体上,它是可预测的。你可以把你所有想做的事情收罗到一块,整理计划,慢慢把图纸画出来。程序确是个多变的世界。你都不知道你做的东西下个月会变成什么。整体规划就成了一种费力不讨好的事情。我们只能务实的实现一小个任务,然后以后的事情再
2015-06-15 14:40:52
340
原创 php标准规范
<1. 代码块不得超过10行(独立的代码单元,包括函数不仅限于函数) 2. 代码块职责单一(功能单一原则) 3. 分清控制器和模块的职责(控制器、模块的职责界定) 1. 命名必须采用大小写字母,不得有下划线、数字和特殊字符。 2. 名称不得超过15个字符,须超过15个字符,请申请缩写(当前可用缩写:mag:杂志,arg:参数) 3. 注释在有必要的时候添加,而且注释必须对理解逻辑很作用,注
2015-06-15 13:45:54
551
原创 wailterphp的start
一个引擎,精简和低耦合的极致体验。一个引擎,如何避免加载不必要的代码?wailterPhp在start.php里面做了极大的精简。在文件里, 只提供了可以自动装载功能类的环境,和主动加载功能类的方法。当然,我们在主动加载中,为监控 挂载了注入接口。如果你只装载引擎,那么它只会做这些事情,不会加载其他任何冗余的内容。waiterphp强调低耦合服务和协议。我们可以加载start.php,然后在脚本
2015-06-08 17:43:34
209
原创 请假问题的实现
有时候我们真是滥用设计模式啊。例如下面的场景: 【场景】假设现在一个公司的请假流程如下:一天及以下由小组组长审批,一天以上三天以下由经理审批,三天以上七天以下由老板审批,七天以上直接劝退。 【实现】class Employee{ public static function canLeave($day) { if ($day > 7) {
2015-06-08 17:13:18
509
原创 PHP 5.6.3 日期bug
代码如下:<?phpvar_dump(date('Y-m-d H:i:s', strtotime('2015-10-22 10:00:00') + 86400));var_dump(date('Y-m-d H:i:s', strtotime('2015-10-23 10:00:00') + 86400));var_dump(date('Y-m-d H:i:s', strtotime('2015
2015-06-08 16:00:32
317
原创 think.class.php的start函数优化
Think.class.php里面40行到99行的代码太乱了。逻辑很简单,debug模式直接装载代码运行,非debug模式有runtime就装载runtime没有则装载代码并生成runtime文件,为何不做简单的抽离,为何要把装载代码和生成runtime弄到一块,看起来很费劲!还有就是你们到底用什么命名方式啊,runtimefile明显是错的!可不可以给出解释。$runtimeFile
2015-06-03 17:06:25
525
原创 thinkphp中twig模板的实现
thinkphp本身支持模板引擎的扩展。对于smarty,它本身内置了,我们只需要设置:'TMPL_ENGINE_TYPE' =>'Smarty'就好了。但对于Twig,我们该怎么办呢?研究发现,我们需要在ThinkPHP\Library\Think\Template\Driver文件夹下面创建Twig.class.php。并把Twig的源码包放到ThinkPHP\Library\Vendo
2015-06-03 17:00:58
662
转载 linux基础命令
linux基础命令服务器登录linux服务器通常通过ssh服务登录。下载putty、SecureCRT等ssh客户端软件,输入ip、用户名便可以登录linux服务器。 有些需要公私钥,请搜索相应文章。当然,我们也可以通过命令行登录:ssh root@192.168.0.11 //(用户名@ip) **注意:**linux系统和git命令行支持ssh命令,cmd不支持ssh命令如何查看文件[p
2015-06-03 11:34:57
383
1
原创 thinkphp 运行机制和优缺点
thinkphp首先设置一些常量、然后运行Think对象(系统环境),装载think的运行环境,包括:自动加载、异常处理、功能核心等。环境准备好后,运行App对象(应用程序),App对象会调用调度者(dispatcher)解析用户请求,然后通过反射机制实现控制器的访问(控制器的前置操作和后置操作),控制器中,通过自动加载机制访问model和其他层的功能,通过display调用View(视图类),渲
2015-06-03 11:23:54
3047
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人