您好,欢迎来到微智科技网。
搜索
您的当前位置:首页ThinkPHP教程_PHP框架之ThinkPHP(一)【入门和介绍、ThinkPHP版本。。。

ThinkPHP教程_PHP框架之ThinkPHP(一)【入门和介绍、ThinkPHP版本。。。

来源:微智科技网
ThinkPHP教程_PHP框架之ThinkPHP(⼀)【⼊门和介绍、

ThinkPHP版本。。。

⼀、什么是框架

  就是别⼈写好的⼀批类和⼀个规则

注意,不仅仅是在学习中,更是在以后的⼯作中,在选择框架的时候,不要⼀味地追求\"⼤\"、\"全\",⽽是要根据当时项⽬的需要选择合适的框架

  1、MVC模式

    M  Model  模型  就是数据库操作类(通过数据库操作类去操作各个表)    V  View   视图  模板

    C  Controller控制器 控制器来实现模板、模型之间的控制关系

    控制器也是⼀个类,这个类中有不同的⽅法,所以控制器也叫模块(Module),其中的⽅法叫动作(Action)!     那么问题来了,视图是如何告知哪个控制器(模块)去执⾏哪⼀个⽅法(动作)呢?结果是URL    ⽐如说在⼀个项⽬中有如下两个模块

      ⽤户管理  (⽤户注册、⽤户修改、⽤户删除、⽤户编辑)      商品管理  (⽤户下单、修改订单、取消订单)

⼆、ThinkPHP框架

  1、具有⽐较好的跨平台性

    ⽆论是服务器平台(Linux、Windows、Unix)还是服务器软件(Apache、IIS、Nginx),都能良好的⽀持  2、⽂件名⼤⼩写问题

    Windows中的⽂件名是不区分⼤⼩写的,⽽Linux和Unix中的⽂件名是区分⼤⼩写的!那么就可能在平台移植过程中,出现⽂件找不到的情况,⽽ThinkPHP很好的解决了这个问题,只要在ThinkPHP中开启了APP_DEBUG,即调试模式,那么即使在Windows下开发,ThinkPHP就已经严格区分了⼤⼩,这就从源头上解决了平台移植⼤⼩写的问题!  3、URL⽀持多种模式    共有4种模式,⽅便SEO  4、⽀持⾃动加载、动态编译    节约系统开销

  5、AJAX⽀持、视图、分组、权限管理、关联操作、主从数据库、缓存(apc、db、memcache、shmop、xcache、file)  6、⾃动验证、⾃动完成、映射  7、加载第三⽅类库

三、ThinkPHP版本和⽂件夹规范  1、官⽹:  2、软件开发阶段

    A  alpha  内部测试    B  beta   公开测试

    C  RC   开发倒计时(该阶段已经将重⼤和重要的BUG进⾏了修复,仅仅会有⼀些⼩的使⽤性上⾯的⼩bug)    D  final   正式发⾏版本  3、ThinkPHP版本

  基础阶段学习的是2.1RC版(⽬前(2016-08-18)在官⽹上已经没有2.1RC版了,只有2.1正式版),所以使⽤的是2.1正式版

  

  ThinkPHP有核⼼包和完整包之分,完全开发⼿册有PDF、swf、CHM版,还有ThinkPHP的API⼿册    核⼼包  仅仅包含ThinkPHP运⾏的最主要⽂件(不包含扩展类、⽰例、⽂档)(ThinkPHP_2.1_core.zip)    完整包  核⼼包的基础上增加了扩展类、⽰例、⽂档

    ps,其实2.x版本的完整包是有带⽰例和⽂档完整包(ThinkPHP_2.1_full.zip)和带扩展、⽰例和⽂档完整包

(ThinkPHP_2.1_full_with_extend.zip)之分的,但是在3.x以及5.x版本中,完整包就没有分两种了(统⼀叫ThinkPHP_3.1.3_full.zip)    

    注意,核⼼包仅仅只有⼀个ThinkPHP的核⼼⽬录,⽽且完整包和核⼼包的ThinkPHP⽬录也是不⼀样的!完整包的ThinkPHP⽬录中的Vender⽬录下是有很多扩展类的,⽽核⼼包的ThinkPHP⽬录中的Vender⽬录是空的;完整包的ThinkPHP⽬录中的Lib⽬录下是有⼀ORG⽬录的,⽽核⼼包是没有的!           ⽂档下载  

  4、⽂件夹规范

  ThinkPHP的⽂件夹规范分两⼤块,⼀个是系统⽬录结构、⼀个是项⽬⽬录结构    ·系统⽬录结构    

      #ThinkPHP.php⽂件:项⽬初始化时,单⼀⼊⼝⽂件必须引⼊的⼀个⽂件,因为系统⽬录必须通过这个⽂件查找

      #Common⽬录:⼀些公⽤的函数,⽐如说D()、F()等等;其中的convention.php包含ThinkPHP中所有的配置⽂件需要⽤到的东西等等

      #Lang⽬录:语⾔包,就是将ThinkPHP可能产⽣的⼀些错误和异常与对应的⽂字说明做⼀个映射。⽽⽂字说明可以是中⽂、英⽂或其它语⾔,如果是中⽂就是中⽂包,英⽂就是英⽂包等等      #Lib⽬录:包含如下两个⽬录      Think⽬录      

        Db⽬录中的Driver⽬录就相当于数据库抽象层,它屏蔽了连接不同数据库的不同⽅法,统⼀为⼀个名称。可以直接编写⼀个数据库连接类,⽐如说DbMongo.class.php,但是⼀定要注意命名规范!        

        Exception⽬录中是异常处理类

        Template⽬录中是模板解析类。这⾥讨论⼀个问题,就是在ThinkPHP中是使⽤Vendor⽬录中加载的第三⽅类库(⽐如说Smarty)来进⾏模板解析,还是使⽤ThinkPHP⾃带的类库?答案是,推荐使⽤ThinkPHP⾃带的类库进⾏模板解析,原因有两个(1、兼容性更好 2、模板引擎和标签处理是XML⽅式的,处理效率更⾼)         Util⽬录与缓存、Cookie、Session等等有关        ORG⽬录      

        Crypt⽬录与加密有关        Io⽬录与⽬录处理有关        Net⽬录与⽹络处理有关

        Util⽬录RBAC、Socket、遍历、分页等有关      #Model⽬录:框架模式扩展⽬录      #Tpl⽬录:系统处理模板⽬录

      #Vendor⽬录:第三⽅类库      #LICENSE.txt⽂件:版权声明    ·项⽬⽬录结构    

    项⽬初始化操作,在项⽬⽬录下创建⼀个index.php(⽂件名随意,最好与项⽬中的⼦项⽬名相同,⽐如说项⽬前台⽤index.php、项⽬后台⽤admin.php,这就是单⼀⼊⼝⽂件。⼀般来说,⼀个项⽬都有两个⼦项⽬,即前台⼦项⽬和后台⼦项⽬,但是如果⽤了项⽬分组的话,⼀个⼦项⽬就是⼀个分组,所以就没有⼦项⽬了,也就只有⼀个单⼊⼝⽂件。ps,单⼀⼊⼝⽂件名⼀般⼩写,⽽项⽬名⾸字母要⼤写),并写如下代码,再访问即可!      

      #Common⽬录:⾃⼰写的公⽤函数⽬录      #Config⽬录:配置⽂件⽬录

      #Lang⽬录:作⽤同系统⽬录结构中的Lang⽬录

      #Lib⽬录:分为如下两个⽬录,通常还有第三个⽬录Org,该⽬录在项⽬初始化的过程中是不会⾃动⽣成的,可以⼿动创建      Action⽬录:控制器⽬录

      Model⽬录:模型⽬录,即⾃定义数据库类    

      Org⽬录:扩展类,可以直接将系统⽬录中的ORG⽬录下的扩展类Copy过来⽤,也可以⾃⼰写⼀些扩展类      #Runtime⽬录:

      Cache⽬录:编译出来的页⾯(即编译后模板)      Data⽬录:与表相关的数据      Logs⽬录:错误⽇志、运⾏⽇志      Temp⽬录:⽂件缓存

      ~app.php⽂件和~runtime.php⽂件都是系统⽣成的核⼼编译⽂件      #Tpl⽬录:Tpl⽬录下,⼀个⽬录就是⼀套⽪肤,默认有⼀个default⽬录四、项⽬主⼊⼝⽂件  

  1、THINK_PATH

  定义框架路径,说的简单点就是将ThinkPHP这个核⼼⽬录相对于⼊⼝⽂件的相对路径定义给⼀个常量,⽅便书写且不容易写错,在以后要⽤到\"./ThinkPHP/\"地⽅⽤THINK_PATH代替之

  define(\"THINK_PATH\还有⼀个作⽤就是防跳墙!所谓防跳墙就是防⽌⽤户直接去访问敏感⽂件,通常做法是⽤⼀个⾮敏感页⾯去包含这个敏感页⾯,并且在⾮敏感页⾯做⼀些安全⽅⾯的策略,⽐如说进⾏验证,验证通过才允许访问其中的敏感页⾯!这实际上与通过⼀个public⽅法去访问⼀个private属性是⼀个道理的!  2、APP_PATH

  准确的说应该叫做应⽤路径(APP->Application),⽽并⾮项⽬路径,虽然叫项⽬路径也没错,但是总是有些歧义!    ·项⽬应该叫Project,这就是我们所开发的整个项⽬,ThinkPHP核⼼⽬录就是在项⽬下⼀级⽬录中

    ·应⽤即Application,这是我们所开发的整个项⽬中的⼀个个应⽤,⽐如说通常⼀个项⽬会有前台应⽤和后台应⽤,那么就可以在这个项⽬的下⼀级⽬录中创建两个⼊⼝⽂件(说明⼀下,在没有进⾏分组时,单⼀⼊⼝⽂件的这个单⼀是针对应⽤来说的,所以如果有两个应⽤就需要两个⼊⼝⽂件),来分别创建这两个应⽤,即两个⽬录(与ThinkPHP核⼼⽬录平级)  3、APP_NAME

    ·让ThinkPHP在进⾏加载的时候更好的区分不同的应⽤

    ·便于以后在做权限管理(RBAC)的时候,能够更好的区分前台应⽤和后台应⽤的权限  4、引⼊\"ThinkPHP.php\"

  注意,不要太纠结到底是哪个(include/include_once/require/require_once),重点是把\"ThinkPHP.php\"这个整个框架的⼊⼝⽂件引⼊!

  5、APP::run();

  ⽤APP类的静态⽅法run()创建⼀个应⽤,并不是⾮得通过APP来调⽤这个静态⽅法,也可以$app=new APP;$app->run();这样通过⼀个APP对象来调⽤run()实现创建⼀个应⽤的操作五、ThinkPHP的项⽬编译机制

  项⽬编译机制的两个主要⽂件,~runtime.php(核⼼缓存⽂件)和~app.php(项⽬编译缓存⽂件) ps,注意⼀下设置都是在⼊⼝⽂件中进⾏的

  对于项⽬编译机制的理解,就是在第⼀次执⾏的时候,将执⾏所需要的部分系统代码和项⽬代码拎出来分别放到~runtime.php和

~app.php中,那么在以后的执⾏中,直接执⾏~runtime.php和~app.php中的代码,⽽不必向第⼀次执⾏那样,需要去操作系统⽬录和项⽬⽬录中⽂件,从⽽节省了⼤量的I/O开销,那么项⽬的运⾏速度会有明显的提升!⽽且ThinkPHP对~runtime.php和~app.php⽂件本⾝做了⼀定优化,即将这两个⽂件中的注释、空格、换⾏等等⼀些⽆关代码执⾏的字符去掉了,从⽽使得⽂件更⼩,执⾏更加有效率!但是这并不利于程序员调试,因为这个代码就⼀⾏你怎么调试,所以要⽤define(\"STRIP_RUNTIME_SPACE\加上这些注释、空格、换⾏等等字符,便于程序员阅读代码!

  ~runtime.php中的代码是由系统⽬录中的core.php⽂件决定的

  ~app.php⽂件通常包含项⽬配置⽂件(包括惯例配置(可以理解为默认配置)和项⽬配置(⾃定义配置),⾃定义配置优先级⾼于默认配置)、项⽬公⽤函数⽂件(common.php)

  1、在测试define('STRIP_RUNTIME_SPACE',false);发现的⼏个问题

    ·如果不删除Runtime⽬录,则它是不⽣效的,因为⼊⼝⽂件在创建整个应⽤⽬录的时候,如果发现要创建的⽬录存在,它是不会修改这个存在的⽬录的!

    ·⽆法直接删除应⽤⽬录(即使提供了系统管理员权限也不⾏,不知道咋地),但是可以删除应⽤⽬下的任何⼀个⼦⽬录    ·这条语句必须是放在引⼊\"ThinkPHP.php\"的操作之前,否则是不起作⽤的!实际上,这对⼊⼝⽂件中的所有语句都适⽤    ·这条语句对~app.php不起作⽤

  2、define(\"RUNTIME_PATH\

  可以修改RUNTIME⽬录的,不过即使是修改RUMTIME⽬录,也要是在应⽤⽬录下,所以最好⽤APP_PATH拼⼀下  3、define(\"NO_CACHE_RUNTIME\

  进⾏该设置后,就不会⽣成核⼼(系统)缓存⽂件了,但是还是会⽣成项⽬(应⽤)编译缓存⽂件,⽽在调试模式下不会⽣成项⽬编译缓存,但是会⽣成核⼼缓存,所以要想既不⽣成核⼼缓存也不⽣成项⽬编译缓存,就要同时开启调试模式和进⾏该设置。在应⽤配置⽂件(应⽤⽬录->Config⽬录->Config.php⽂件)中的数组中添加⼀个元素\"APP_DEBUG\"=>\"True\"即可开启调试模式                                  

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务