php框架

转】主流PHP框架间的比较(Zend Framework,CakePHP,CodeIgniter,Symfony,ThinkPHP,FleaPHP)

人盡茶涼 提交于 2020-02-26 09:10:17
Zend Framework 优点: Zend Framework大量应用了PHP5中面向对象的新特征:接口、异常、抽象类、SPL等等。这些东西的应用让Zend Framework具有高度的模块化和灵活性。同时,因为严格遵循“针对接口编程”和“单一对象职责”等原则,让Zend Framework很有希望成为一个出色的企业应用开发框架. 官方出品,自带了非常多的library,框架本身使用了很多设计模式来编写,架构上很优雅,执行效率中等;MVC设计,比较简洁,具有路由功能,配置文件比较强大(能够处理XML和php INI),各种 library 很强大,是所有PHP框架中各种功能最全面的,包括它不仅是一个框架,更是一个大类库(取代PEAR),这是它的主要特色;能够直观的支持除数据库操作之外的Model层(比 CodeIgniter 和 CakePHP 强),并且能够很轻易的使用Loader功能加载其他新增加的Class;Cache功能很强大,从前端Cache到后端Cache都支持,后端Cache支持Memcache、APC、SQLite、文件等等方式;数据库操作功能很强大,支持各种驱动(适配器). 文档很全,在国内社区很成熟,并且目前不少Web 2.0网站在使用,学习成本中等. 缺点: MVC功能完成比较弱,View层简单实现(跟没实现一样),无法很强大的控制前端页面.

PHP学习心得1

旧时模样 提交于 2020-02-26 01:19:03
  php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理,这样你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。   而在接触php前,我主要是专攻java web这个方向,虽然java学习起来有些难度,但我却被它的面向对象特性深深吸引住。   实际上,从技术架构来说,Java语言相比PHP有明显的优势,Java使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。PHP只能实现简单的分布式两层或三层的架构,而JAVA可以实现多层架构。数据库层(持久化 层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用Java的web开发技术 实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架 构多层的商业应用。从数学运算和数据库访问速度来讲,Java的性能也优于PHP.实际上,对于跨平台的大型的企业应用系统来讲,Java几乎已经成为唯 一的选择(微软.NET不支持跨平台)

PHP学习心得

↘锁芯ラ 提交于 2020-02-26 01:18:44
从事3年.Net开发,感觉微软做的相当不错。什么都封装好了,只管调用,这对于有一定功底的程序员来说,不见得是件好事。就这样眼光瞄准到了PHP,选择PHP一个最大的原因是喜欢它的语法结构与C语言太相似了。当然还有一个原因,各种大型项目都少不了PHP的参入,例如维基百科、百度等等。  从零学习PHP到应用到项目中,总共花费时间不超过一个星期,按小时算不超过 7 个小时。分享下本人学习路线: 1、第一件事,网上买了一本PHP入门书籍,回家第一件事按书中实例安装环境,完成最伟大的程序编写:Hello world! 2、第二件事,初步熟悉PHP语法,然后大致了解PHP与其他语言的区别,学习当前比较优秀的PHP框架,其中中国一个开源框架做的不错ThinkPHP,有兴趣的可以看看,总有借鉴的地方; 3、第三件事,根据书中实例完成小程序编写; 4、第四件事,网上找开源的PHP代码学习。 5、第五件事,建设个人网站,之前借鉴开源代码完成了一个威客平台的开发,可因种种原因,放弃了,转做电视节目播放,后续功能还在学习开发中,有兴趣的可以看看本人的网站: 核讯网 ( http://www.cnkern.com ) 来源: https://www.cnblogs.com/cnkern/p/4107590.html

PHP 框架 CodeIgniter 4.0 正式版发布了!

笑着哭i 提交于 2020-02-26 00:49:02
作者:Lonnie Ezell 原文:https://forum.codeigniter.com/thread-75581.html 今天我们隆重的宣布,完全重写的 CodeIgniter 4.0 正式版发布了!非常感谢所有贡献代码,撰写文档或提交 Issue 的朋友们。当你浏览市面上大多数的 PHP 框架时,你会发现其中大多数框架都具有某种形式的商业支持,但是对于 CodeIgniter 框架来说,是一些普普通通的开源贡献者们帮助了框架的发展,甚至在遇到一些挑战时仍在继续坚持。 回首过去,我第一次提交代码是在 2015 年 8 月 26 日。当时,我只是凭兴趣自愿提供一些代码,我从未想过我会成为这个项目的首席开发人员,但当时由于其他团队成员的时间问题,我担任了这个看起来容易的职位。在最初的三年左右的时间里,我一直在用业余时间编写代码,努力实现自己的承诺。这些年来,我有好几次想停下来,我想去开发一些更可能完成的东西,例如我想探索的四个主要思想中的任何一个,是你们让我坚持了下去。 在过去的一年半中,你们中的许多人都挺身而出,以帮助将该项目推向终点。到今天,如果没有大家的帮助这是不可能发生的。 不幸的是,一切并不都是美好的,因为我们最近因肺癌失去了出色的项目负责人 James Perry。他的杰出贡献使得这次 4.0 版的发布成为可能。今天是他的生日,James 生日快乐! --

转php单一入口框架设计

余生长醉 提交于 2020-02-22 00:10:42
说到PHP单入口模式,很快想到关于PHP的一些框架,zend,thinkphp,qeephp,还有cakephp 等,它们都采用了统一的入口,可以根据不同的需要,分前台入口后台入口或者其他操作权限入口,这样的设计模式优点很明显,比如。权限控制,url重写,结 合MVC清晰地目录结构。这些都是单入口模式所带来的便利,当然这样的也会带来执行效率的疑问。 由单入口模式,我顺便提下单件模式,结合OO特性。 <?php class A{ private static $tag = null; private function __construct(){} static function getObject(){ if( null == self::$tag){ self::$tag = new A(); } return self::$tag; } } $object1 = A::getObject(); $object2 = A::getObject(); if($object1 === $object2){ echo "同一对象"; }else{ echo "不同对象"; } 通过$tag标示class是否实例化,$tag为空,则实例化当前类并赋给$tag,如果不为空则返回这个指向实例的static 属性。 继续知识延伸...工厂模式

php常见的三种框架比较

荒凉一梦 提交于 2020-02-19 11:38:35
前言 最近在网上查了一下php的最常用的三种框架tp,laravel,yii2的资料并结合自己的理解总结一下三种框架的优缺点,话不多说请看正文。 正文 yii2: 优点:gii蛮不错的,简化了开发流程,可以生成绝大数的代码,开发后台等效率还是蛮高的 缺点:前后端完全的分离的趋势下,yii2前后端的耦合的还是有些重了 laravel: 优点:优雅,框架结构组织清晰(抽象了中间件,任务,服务等模块),提供的artisan开发工具开发效率高,社区活跃完善,并且提供了简化的轻量级框架lumen 缺点:貌似代码有些过于优雅丧失了一些性能 lumen 优点:基本结构同Laravel,但是已经为API开发做了一些优化,非常适合RESTful的API服务器 缺点 缺点:如果要用Lumen做传统web,需要自行加载一些Service,比如session;此外,有些为Laravel写的包会不太兼容Lumen,需要自行修改和调整 thinkphp3.2 优点:简单明了方便快捷,上手快 缺点:缺少面向对象的设计,框架社区相关的辅助工具少 thinkphp5 优点:基本面向对象,可能借鉴了laravel或者ruby on rails, 对于开发者更加友善了 缺点:框架社区相关的辅助工具仍然少 为什么不选TP5.x TP5.x明显借鉴了很多Laravel的设计,但是感觉学得不伦不类的,就行中国特色的xxx一样

如何实现一个php框架系列文章【4】url路由管理

巧了我就是萌 提交于 2020-02-19 04:11:05
直接通过url参数访问业务模块($app)中控制器($ctl)里的函数($act) 我们支持3种路由模式 普通模式 _a =$app, _u=$ctl.$act 最简单的方式,专注实现业务$act函数,不需要再写额外代码 为什么参数名前面要加下划线就不解释了 easy模式 _easy=$app.$tpl.$ctl.$act _easy=$app.$ctl.$act 在web开发中,通常我们在$act中输出一个前端页面, easy模式下,如果未实现$act处理函数,会自动寻找并显示对应的前端模板文件。 对于简单的展示页面适合使用这种路由模式 url重写模式(需要nginx或apache配置) apache: ^rewrite[\.\/](.*)$ /index.php?_rewrite=$1 [R,QSA] nginx: rewrite ^/rewrite[\.\/](.*)$ /index.php?_rewrite=$1 last; rewrite.{$app}.{$ctl}.{$act}.{$params}.html 或更加优雅的目录式访问方式 rewrite/{$app}/{$ctl}/{$act}/{$params}.html 其中$params为选填参数部分.格式为urlencode后的参数列表 如果想传递sp_uid=1&d=1.2&p=sb, 那么$params =

TP5 日志系统

喜欢而已 提交于 2020-02-18 00:42:50
一、改变日志记录位置 //public的index.php中改变日志保存路径 <?php // [ 应用入口文件 ] // 定义应用目录 define('APP_PATH', __DIR__ . '/../application/'); //自定义日志位置 覆盖原来日志位置 define('LOG_PATH', __DIR__ . '/../log/'); // 加载框架引导文件 require __DIR__ . '/../thinkphp/start.php'; 效果 二、在全局异常处理中加入日志系统 //controller 控制器 banner 抛出异常 <?php namespace app\api\controller\v1; use app\api\validate\IDMustBePostiveInt; use app\api\model\Banner as BannerModel; use app\lib\exception\BannerMissException; use think\Exception; class Banner { public function getBanner($id){ (new IDMustBePostiveInt()) -> goCheck(); $banner = BannerModel::getBannerById($id);

ThinkPHP教程_PHP框架之ThinkPHP(八)【CRUD与连贯操作】

戏子无情 提交于 2020-02-17 07:54:56
一、CRUD   ThinkPHP提供了灵活和方便的数据库操作方法,其中最基本的就是CRUD四个操作,只有掌握了最基本的CRUD操作,才能更好的运用更多实用的数据库操作方法   CRUD操作通常与 连贯操作 配合   1、创建操作   使用add()方法或addAll()方法     ·add()方法     可以直接传入要插入的数据,而且 会在插入之前会过滤掉数据表中不存在的字段以及非法的数据类型(例如对象、数组等非标量数据) 。若当前表有主键自动增长并且插入记录成功的话,则返回所插入记录主键值                    如果在执行add()操作之前已经创建了数据对象(通过create()方法或data()方法),则add()中可以不传值                    ·addAll()方法     addAll()方法可以实现批量插入数据   2、读取操作   在ThinkPHP中通常分为 读取字段(值,单一值) 、 读取记录(一维数组,单条记录) 和 读取记录集(二维数组,多条记录)     ·读取字段(值,单一值)     getField()方法     读取某一条记录的某一个字段返回的才是单一值               读取某一条记录的多个字段返回的是一个一维关联数组(键为第一个字段值,值为 其余 字段值)(之所以说其余

2019PHP面试题最全面归纳总结

℡╲_俬逩灬. 提交于 2020-02-17 06:49:46
1、请选择以下代码运行的结果: <?php if ('1e3' == '1000') echo 'LOL'; ?>   A 无任何输出结果      B LOL       C 不执行且报错 解析:1e3 是 科学计数法 实数的指数形式 为1乘以10的三次方,故‘1e3’=='1000'是成立的,输出echo ‘LOL’; 2、请选出以下代码运行的结果: <?php $a = "aabbzz"; $a++; echo $a; ?>   A b            B aabbzz            C aabcaa 解析: 字符串字母相加其实就是在末尾字母加一 如:$a = "a"; $a++;答应结果就是 b,$a=''aa';结果就是ab 故$a = "aabb";打印结果就是 aabc ,如$a = "aabbz";结果就是 aabca,因为Z是末尾字母故加一变为a,向前一位进一,b就变为c,故结果为C; 3,写出一下程序的输出结果:<?php   $data = ['a','b','c']; foreach($data as $k=>$v){ $v = &$data[$k]; } > A $data = ['a','b','c'];            B $data = ['b','b','c'];            C $data = ['b','c','c