轻松自学ThinkPHP3.0第一天·上午
来源:互联网 发布:d算法 编辑:程序博客网 时间:2024/05/17 05:15
1.0框架概念
有人解释为,框架是别人写好的一堆类,库,按一定的规则来使用。这种解释是不准确的。
框架,framework。
框架是半成品
框架能组装你的代码(与库不同,与工具类不同)
成熟的框架往往包含了大量的常用库(图片,SESSION,上传等等)
2.0为什么要使用框架
统一了环境(如,PHP4,5的函数不用考虑,由框架处理);
简化了大量重复操作,直接上手写与业务相关的代码(如,连接数据库);
成熟的框架有大量的库文件,调用方便;
语法相对规范(函数名,类命名等),方便团队协作;
作为一个程序员,当你连续两次编写同一种业务逻辑的代码时,你就应该考虑将这段代码封装成一个函数或者一个工具类来使用。
开发上的好处
1)屏蔽了平台,版本的区别
linux与win的区别:权限问题,大小写敏感问题。
当我们将win下写好的代码发布到Linux中时就常会遇到大小写敏感问题。如,index.php和Index.php在win下是同一个文件,在Linux下却表示不同的两个文件。当我们发布项目网站时就可能存在因为文件名的大小写敏感而导致运行出错。使用think php框架时它就会帮我们处理这一点,屏蔽了平台间的差异性。
具体例子:ThinkPHP框架屏蔽了PHP版本的差异,如,mkdir函数。
mkdir()函数在php5.0以前是不能递归创建目录的,在5.0及以后可以递归创建目录。框架的mk_dir()函数已经考虑了版本的区别,无论是在php 5.0前后版本都可以递归创建目录,可以放心调用。
2)不用写大量的重复代码
数据验证功能等,数据库类,分页类等,都可以直接在框架的库文件中调用。
3)提供很多成熟的工具(库)
分页类,数据库类,文件上传类,图片处理类等等.便于调用。
4)方便团队合作
框架有自身的命名及代码规范,便于团队之间合作。
2.1为什么不用框架
1)效率低
PHP是每次HTTP请求过来以后,初始化全部资源(例如,创建数据库连接、加载系统类库,创建缓存等),处理完毕,释放全部资源。
2)应用门槛上升,学习成本也相对较高
这对于原本只是定位中小应用的PHP变得尤为尴尬,和PHP的“快、糙、猛”的特点相悖。
3)大型框架考虑的因素过多,开发人员在开发应用时还需要额外关注代码以外的细节过多
如:非标准约定、冗长的手册、琐碎的配置、复杂的文件目录结构、难以限制的合理约束、千姿百态的类库等等,使大多数程序员开发过程屡遭困惑。提高开发效率也成了一句空话。
具体分析:
①框架代码多,降低了运行效率
通过Zend Framework 框架输出一个”hello,world“,框架在运行时前后需要引入上百个文件;TP(ThinkPHP)也需要引入将近10个文件。
PHP作为脚本语言,不能常驻内存,每次执行结束后内存中关于PHP文件的相关的资源都会被清空,这就会在每次HTTP请求发送过来时,都要初始化整个框架(将框架载入内存),开销很大,影响效率。
对比Java程序,Java程序可以常驻内存,首次执行Java程序时,可以将Java框架载入内存,以后执行时可以不用再次载入内存,不影响效率。
附:脚本语言都有不能常驻内存的特点?
②在web应用的开发语言中,PHP具有”快、糙、猛“的特点
用了框架后,代码”转弯“多,与本身的特点相悖。
③框架本身也是有学习成本的
使用一件工具本身是为了降低成本,但是付出的学习成本却比能够降低的成本高。
有一些框架,命名规范非常复杂,继承关系复杂,导致开发效率降低
2.2到底用不用框架?
1:用不用框架?
1)硬件效率的发展速度远超软件效率
大内存,大硬盘,高带宽,已不必把程序效率放在首位考虑,而是把开发效率放在首位。
2)PHP已经走向大企业应用,不再是草根语言
如,百度贴吧、facebook等。(facebook考虑到PHP不能常驻内存,自行写了一个hihop,可以将PHP代码转化成C++代码)
在网站开发中,PHP已经占有了70%的市场份额。
3)开发中的个人英雄时代已经成为历史,大家都要适应团队合作
在项目开发的过程中,如果不使用框架,很难去规范不同程序员的编码习惯,这就让团队很难进行合作开发,影响开发的效率。使用框架,能够使程序之间达成一种统一的约束,共同遵守框架的规范,有利于团队的合作。
2:学不学框架?
学!
你学的框架本身(比如ThinkPHP,ZendFramework,cakePHP),未必能在工作中用上(有的公司可能会自己内部编写一个小型框架来使用),但是框架的思想,肯定会用上。
框架的种类有很多种,学习框架的目的在于掌握框架的思想,在之后遇到其他类型的框架类型时也可以很快的上手。
3.0主流框架介绍
3.1Zend framework
3.2CakePHP
3.3Yii
3.4ThinkPHP
4.0ThinkPHP3.0(简称TP3.0)的特点
5.0框架的学习思路
1)学习TP的用法
2)研究TP的源码,了解框架的运转机制
3)总结MVC框架的共性,方便快速学习其他框架
5.1单入口解释
1:TP框架的引入
<?phpecho "hello,world";?>②使用ThinkPHP框架输出“hello,world”: C:\AppServ\www\TP\02.php
<?php// 引入并配置框架include('./ThinkPHP/ThinkPHP.php');?>运行效果:
<?php// 本类由系统自动生成,仅供测试用途class IndexAction extends Action { public function index(){ header("Content-Type:text/html; charset=utf-8"); echo '<div style="font-weight:normal;color:blue;float:left;width:345px;text-align:center;border:1px solid silver;background:#E8EFFF;padding:8px;font-size:14px;font-family:Tahoma">^_^ Hello,欢迎使用<span style="font-weight:bold;color:red">ThinkPHP</span></div>'; }}修改成:
<?phpclass IndexAction extends Action { public function index(){ header("Content-Type:text/html; charset=utf-8"); echo 'hello,world'; }}再次运行02.php文件就会在页面输出hello,world。可以判断,输出的hello,world是调用了IndexAction.class.php中的index方法得到的结果。
<?php// 本类由系统自动生成,仅供测试用途class IndexAction extends Action { public function index(){ header("Content-Type:text/html; charset=utf-8"); echo "hello,world"; }public function test(){header("Content-Type:text/html; charset=utf-8"); echo "测试!"; }}在浏览器地址栏中输入:http://localhost/tp/02.php/Index/test,可以看到运行效果如下:
<?phpclass UserAction extends Action { public function test(){ echo "测试2!"; }}③浏览器地址栏输入:http://localhost/tp/02.php/User/test
类名,大驼峰写法,和文件名保持一致,class UserAction;
继承关系:最终应该继承自Action类,class UserAction extends Action{};
abstract class Action { // 视图实例对象 protected $view = null; // 当前Action名称 private $name = ''; public function __construct() { tag('action_begin'); //实例化视图类 $this->view = Think::instance('View'); //控制器初始化 if(method_exists($this,'_initialize')) $this->_initialize();}…}
可以看出,Action类的构造函数中会去判断_initialize()方法是否存在,如果存在的话便调用。
<?phpclass UserAction extends Action { public function test(){ echo "测试2!"; } protected function _initialize(){ echo "我是控制器,我被调用了!<br>"; }}
- 轻松自学ThinkPHP3.0第一天·上午
- 轻松自学ThinkPHP3.0第二天·上午
- 轻松自学ThinkPHP3.0第二天·下午
- php自学第一天
- Spring自学第一天
- linux自学第一天
- IOS自学第一天
- android自学第一天。
- 自学struts2第一天
- JAVA自学第一天
- 自学第一天
- android自学第一天
- 自学Linux第一天
- python 自学 第一天
- 太过平淡的QCon第一天上午
- CVPR 2015 Oral概览 - 第一天上午
- Android 智能短信 第一天 (上午)
- java自学笔记第一天
- 第11周项目2-求最大公约数
- hdoj 2874 Connections between cities 【Tarjan离线LCA】
- windows 安装python
- 杭州电子地图 高清15、17、19级别 谷歌电子地图资源
- 笔记:oracle的学习笔记1
- 轻松自学ThinkPHP3.0第一天·上午
- ArcEngine 经纬度坐标 画线
- shader 的入门
- 心情1
- 算术平方根解法
- 学个痛快!十款不容错过的Swift iOS开源项目
- poj 1129 Channel Allocation (dfs)
- 我的第一篇博客
- ios7新增api实现扫描二维码