php5.5完全开发手册,升级指导-ThinkPHP5.0完全开发手册

升级指导

从V5.0.11升级到V5.0.12

V5.0.11可以无缝升级到V5.0.12。

从V5.0.10升级到V5.0.11

V5.0.10可以无缝升级到V5.0.11。

升级完成后请务必清空下数据缓存。

从V5.0.9升级到V5.0.10

V5.0.9可以无缝升级到V5.0.10。

从V5.0.8升级到V5.0.9

V5.0.8可以无缝升级到V5.0.9。

从V5.0.7升级到V5.0.8

如果自定义了应用的命名空间的话,原来的app_namespace配置参数改为APP_NAMESPACE常量在入口文件中定义

如果使用了多对多关联,并且定义了中间表,那么中间表改为去掉前缀后的数据表名。

模型的scope方法之后只能使用数据库查询方法而不能使用模型的方法。

从V5.0.6升级到V5.0.7

V5.0.6可以无缝升级到V5.0.7。

从V5.0.5升级到V5.0.6

V5.0.5可以无缝升级到V5.0.6。

由于数据库缓存策略的改进,之前如果使用了数据缓存,请先清空下数据缓存。

之前因为升级到5.0.5版本后 时间字段使用整型后也会自动格式化输出的问题,现在可以设置数据库的配置参数 datetime_format值为false即可关闭自动转换。

另外,注意,如果使用了MongoDb数据库扩展的话,请删除数据库配置文件中的query参数。

从V5.0.4升级到V5.0.5

从V5.0.4升级到V5.0.5需要注意如下事项:

模型的时间日期字段会自动进行格式化输出,不需要进行额外处理。

原生查询不再支持返回数据集对象。

Connection类的model方法已经更改为getQuery。

关联定义方法的alias参数已经废弃。

分页查询返回类型变成thinkPaginator(用法不变)。

数据缓存自动采用子目录方式避免缓存数据文件过多影响性能。

Session类添加了secure和httponly参数,并且默认是true,如果不支持请手动关闭。

从V5.0.3升级到V5.0.4

从V5.0.3升级到V5.0.4需要注意如下事项:

模型的关联定义方法必须采用驼峰法(小写字母打头)命名规范,但关联调用可以支持驼峰和小写方式。

行为类的方法必须使用驼峰法命名,如果你使用了钩子位作为行为执行方法入口,请修改为驼峰法,例如 app_init钩子位对应的行为方法名应该是 appInit。

如果你使用了Query类的fetchClass方法自定义数据集返回对象的话,请改为在模型中设置resultSetType属性,数据库类不再支持自定义查询数据集对象(只支持数组和系统的thinkCollection数据集对象)

从V5.0.2升级到V5.0.3

从V5.0.2升级到V5.0.3需要注意如下事项:

对于join方法和view方法使用子查询的情况,请尽量使用数组方式:

["子查询"=>"别名"]

从V5.0.1升级到V5.0.2

从V5.0.1升级到V5.0.2需要注意如下事项:

下列模型属性和方法由原来的静态(static)定义改为动态定义:

聚合模型的relationModel属性

Model类的useGlobalScope 属性

软删除属性 deleteTime属性

全局查询范围方法base改为动态方法

原来的join方法和view方法的第一个参数规范化,支持下面三种用法:

用法一:[ "带前缀表名"=>"别名" ]

>#### 用法二:"带前缀表名 别名"

>#### 用法三:"不带前缀的表名"

如果有其它用法注意调整,下面的用法不再支持:

"不带前缀表名 别名"

如果使用了空操作方法,无需给_empty方法添加任何参数,当前操作名的获取直接使用请求对象的action函数获取。

从V5.0升级到V5.0.1

从V5.0升级到V5.0.1需要注意如下事项:

扩展配置参数extra_config_list废弃,除了数据库配置之外的扩展配置放入application/extra目录自动识别加载。

模型的field属性无需配置字段类型

查询构建器使用手动参数绑定的时候不要使用?号占位绑定,使用命名参数绑定

如果使用了file_get_contents("php://input")请改为Request对象的getInput() 方法获取

文件File类取消md5()和sha1()方法,请使用hash("md5")和hash("sha1")方法替代

从V5.0RC4升级到V5.0

可以轻松的从RC4版本升级到正式版,不过请注意如下事项:

如果定义了路由映射(静态路由)的则改为普通路由规则定义

定义了路由规则之后,原来的URL地址被禁止访问,请注意检查是否还有这种情况

如果配置了url_deny_suffix参数,改为路由的deny_ext参数设置

模型save方法返回值改为影响的记录数,并且方法参数中取消了getId参数

Request对象controller方法返回驼峰控制器名,如果使用该方法渲染模板的话,请使用Loader::parseName(Request::instance()->controller())转换

如果使用了Sqlsrv驱动则,原来自动转换小写数据表字段默认不对数据表字段进行小写转换,请更改PDO::ATTR_CASE参数

如果部署在sae 需要使用sae扩展包

如果使用了Sqlsrv/Orace/Firebird驱动,则自行添加原来的驱动文件

配置参数读取的时候取消环境变量判断,需要读取环境变量的时候改用Env类

环境变量定义文件更改为 .env 由原来的PHP数组改为ini格式定义(支持数组方式)

状态配置和扩展配置的加载顺序调整 便于状态配置文件中可以更改扩展配置的参数

取消域名绑定到路由分组功能

控制器类的success和error方法url参数支持传入空字符串,则不做任何处理关键几点:

默认模板目录全部是小写+下滑线规范;

控制器类的success、error和redirect方法无需使用return;

模型的save方法返回值更改为影响的记录数,而非主键,使用model->id方式获取主键;

路由定义后不能再使用原来URL地址访问;

从V3.2版本升级到V5.0

3.2版本无法直接升级到5.0版本,这里只是给出了升级指导思想和为了使用3.X版本的开发者更快的熟悉并上手这个全新的版本。同时也强烈建议开发者抛弃之前旧的思维模式,因为5.0是一个全新的颠覆重构版本。

需要摒弃的3.X旧思想

URL的变动

首先对3.X的不严谨给开发者们带来的不正确的引导表示歉意,在5.0版本正式废除类似/id/1方式 可以通过get获取到id的方法,严格来讲这样的url是不属于$_GET的,现在可以通过param获取,具体使用可以通过请求部分查询。

模型的变动

新版的模型查询返回默认对象,系统默认增加了toArray方法,许多开发者在all或select尝试使用toArray来转换为数组,在此希望开发者能理解对象的概念,尝试使用对象进行数据的使用,或者使用db方法进行数据库的操作,也提醒一下部分滥用toArray的开发者,all或select结果是对象的数组集合,是无法使用toArray进行转换的。

新版变化

命名规范

目录和文件名采用‘小写+下划线’,并且以小写字母开头;

类库、函数文件统一以.php为后缀;

类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致(包括大小写);

类名和类文件名保持一致,并统一采用驼峰法命名(首字母大写)

函数

系统已经不依赖任何函数,只是对常用的操作封装提供了助手函数;

单字母函数废弃,默认系统加载助手函数,具体参考上一个章节‘助手函数’;

路由

5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规则(正则定义)的方式,具体这里不再赘述。

控制器

控制器的命名空间有所调整,并且可以无需继承任何的控制器类。

应用类库的命名空间统一为app(可修改)而不是模块名;

控制器的类名默认不带Controller后缀,可以配置开启controller_suffix参数启用控制器类后缀;

控制器操作方法采用return方式返回数据,而非直接输出;

废除原来的操作前后置方法;

版本对比

3.2版本控制器写法

namespace HomeController;

use ThinkController;

class IndexController extends Controller

{

public function hello()

{

echo "hello,thinkphp!";

}

}

5.0版本控制器写法

namespace appindexcontroller;

class Index

{

public function index()

{

return "hello,thinkphp!";

}

}

3.2版本控制器命名

IndexController.class.php

5.0版本控制器命名

Index.php

怎么才能在控制器中正确的输出模板

5.0在控制器中输出模板,使用方法如下:

如果你继承thinkController的话,可以使用:

return $this->fetch("index/hello");

如果你的控制器没有继承 thinkController的话,使用:

return view("index/hello");

模型

如果非要对比与旧版本的改进,模型被分为数据库、模型、验证器三部分,分别对应M方法、模型、自动验证,同时均有所加强,下面做简单介绍。

数据库

5.0的数据库查询功能增强,原先需要通过模型才能使用的链式查询可以直接通过Db类调用,原来的M函数调用可以改用db函数,例如:

3.2版本

M("User")->where(["name"=>"thinkphp"])->find();

5.0版本

db("User")->where("name","thinkphp")->find();

模型

新版的模型查询增加了静态方法,例如:

User::get(1);

User::all();

User::where("id",">",10)->find();

模型部分增强了很多功能,具体请查阅“模型章节”。

自动验证

对比旧的版本,可以理解为之前的自动验证且不同于之前的验证;

ThinkPHP5.0验证使用独立的hinkValidate类或者验证器进行验证,不仅适用于模型,在控制器也可直接调用,具体使用规则请参考“验证”章节,这里不再赘述。

配置文件

新版对配置很多的配置参数或者配置层次都和之前不同了,建议大家要么看看代码,要么仔细通读下官方的开发手册,不要因为配置的问题浪费自己一整天的时间。

异常

5.0对错误零容忍,默认情况下会对任何级别的错误抛出异常,并且重新设计了异常页面,展示了详尽的错误信息,便于调试。

系统常量的废弃

5.0版本相对于之前版本对系统变化进行了大量的废弃,用户如果有相关需求可以自行定义

下面是废除常量

REQUEST_METHOD IS_GET IS_POST IS_PUT IS_DELETE IS_AJAX __EXT__ COMMON_MODULE MODULE_NAME CONTROLLER_NAME ACTION_NAME APP_NAMESPACE APP_DEBUG MODULE_PATH等

部分常量可以在Request里面进行获取,具体参考“请求章节”。

再次说明本章节仅仅为之前使用3.X版本开发者快速理解5.0所写,具体5.0的功能还需要开发者通读手册。

助手函数

5.0助手函数和3.2版本的单字母函数对比如下:

3.2版本5.0版本Cconfig

Eexception

Gdebug

Llang

T废除

Iinput

N废除

Dmodel

Mdb

Acontroller

Raction

B废除

Uurl

Wwidget

Scache

F废除

序文 I. 入门指引 1. 简介 2. 简明教程 3. 安装 4. 运行时配置 II. 语言参考 5. 基本语法 6. 类型 7. 变量 8. 常量 9. 表达式 10. 运算符 11. 流程控制 12. 函数 13. 类与对象 14. 引用的解释 III. 安全 15. 安全 IV. 特点 16. 用 PHP 进行 HTTP 认证 17. Cookies 18. 文件上传处理 19. 使用远程文件 20. 连接处理 21. 数据库永久连接 22. 安全模式 23. PHP 的命令行模式 V. 函数参考 I. Apache 函数库 II. 数组函数库 III. Aspell functions [deprecated] IV. BCMath Arbitrary Precision Mathematics Functions V. Bzip2 Compression Functions VI. Calendar Functions VII. CCVS API Functions [deprecated] VIII. Windows 的 COM 支持函数库 IX. 类/对象函数库 X. ClibPDF Functions XI. Crack Functions XII. CURL, Client URL Library Functions XIII. Cybercash Payment Functions XIV. Cyrus IMAP administration Functions XV. Character Type Functions XVI. Database (dbm-style) Abstraction Layer Functions XVII. 时间日期函数库 XVIII. dBase Functions XIX. DBM Functions [deprecated] XX. dbx Functions XXI. DB++ Functions XXII. Direct IO Functions XXIII. 目录函数库 XXIV. DOM XML Functions XXV. .NET Functions XXVI. Error Handling and Logging Functions XXVII. File Alteration Monitor Functions XXVIII. FrontBase Functions XXIX. filePro Functions XXX. 文件系统函数库 XXXI. Forms Data Format Functions XXXII. FriBiDi Functions XXXIII. FTP 函数库 XXXIV. Function Handling Functions XXXV. Gettext XXXVI. GMP Functions XXXVII. HTTP 相关函数库 XXXVIII. Hyperwave Functions XXXIX. Hyperwave API Functions XL. iconv Functions XLI. 图像函数库 XLII. IMAP, POP3 and NNTP Functions XLIII. Informix Functions XLIV. InterBase Functions XLV. Ingres II Functions XLVI. IRC Gateway Functions XLVII. PHP / Java Integration XLVIII. LDAP Functions XLIX. LZF Functions L. Mail Functions LI. mailparse Functions LII. 数学函数库 LIII. Multi-Byte String Functions LIV. MCAL Functions LV. Mcrypt Encryption Functions LVI. MCVE Payment Functions LVII. Mhash Functions LVIII. Mimetype Functions LIX. Microsoft SQL Server Functions LX. Ming functions for Flash LXI. Miscellaneous Functions LXII. mnoGoSearch Functions LXIII. mSQL Functions LXIV. MySQL 函数库 LXV. Improved MySQL Extension LXVI. Mohawk Software Session Handler Functions LXVII. muscat Functions LXVIII. Network Functions LXIX. Ncurses Terminal Screen Control Functions LXX. Lotus Notes Functions LXXI. NSAPI-specific Functions LXXII. Unified ODBC Functions LXXIII. Object Aggregation/Composition Functions LXXIV. Oracle 8 函数库 LXXV. OpenSSL Functions LXXVI. Oracle 函数库 LXXVII. Ovrimos SQL Functions LXXVIII. 输出控制函数 LXXIX. Object property and method call overloading LXXX. PDF functions LXXXI. Verisign Payflow Pro Functions LXXXII. PHP Options&Information LXXXIII. POSIX Functions LXXXIV. PostgreSQL 数据库函数库 LXXXV. Process Control Functions LXXXVI. Program Execution Functions LXXXVII. Printer Functions LXXXVIII. Pspell Functions LXXXIX. GNU Readline XC. GNU Recode Functions XCI. 正则表达式函数库(Perl 兼容) XCII. qtdom Functions XCIII. 正则表达式函数库(POSIX 扩展) XCIV. Semaphore, Shared Memory and IPC Functions XCV. SESAM Database Functions XCVI. Session Handling Functions XCVII. Shared Memory Functions XCVIII. SimpleXML functions XCIX. SOAP Functions C. SQLite CI. Shockwave Flash Functions CII. SNMP 函数库 CIII. Socket Functions CIV. Standard PHP Library (SPL) Functions CV. Stream Functions CVI. 字符串处理函数库 CVII. Sybase Functions CVIII. TCP Wrappers Functions CIX. Tidy Functions CX. Tokenizer Functions CXI. URL 函数库 CXII. 变量函数库 CXIII. vpopmail Functions CXIV. W32api 函数库 CXV. WDDX Functions CXVI. XML 语法解析函数库 CXVII. XML-RPC 函数库 CXVIII. xdiff Functions CXIX. XSLT Functions CXX. YAZ Functions CXXI. YP/NIS Functions CXXII. Zip File Functions (Read Only Access) CXXIII. Zlib Compression Functions VI. Zend API 24. Overview 25. Extension Possibilities 26. Source Layout 27. PHP's Automatic Build System 28. Creating Extensions 29. Using Extensions 30. Troubleshooting 31. Source Discussion 32. Accepting Arguments 33. Creating Variables 34. Duplicating Variable Contents: The Copy Constructor 35. Returning Values 36. Printing Information 37. Startup and Shutdown Functions 38. Calling User Functions 39. Initialization File Support 40. Where to Go from Here 41. Reference: Some Configuration Macros 42. API Macros VII. PHP API: 扩展开发接口 43. Streams API for PHP Extension Authors VIII. FAQ: 常见问题 44. 一般信息 45. 邮件列表 46. 获取 PHP 47. 数据库问题 48. 安装 49. 编译问题 50. 使用 PHP 51. PHP 和 HTML 52. PHP 和 COM 53. PHP 和其它语言 54. 从 PHP/FI 2 移植到 PHP 3 55. 从 PHP 3 移植到 PHP 4 56. 杂类问题 IX. 附录 A. PHP 及其相关工程的历史 B. Migrating from PHP 4 to PHP 5 C. 从 PHP 3 移植到 PHP 4 D. 从 PHP/FI 2 移植到 PHP 3 E. PHP 的调试 F. 扩展 PHP 3 G. 函数别名列表 H. 保留字列表 I. 资源类型列表 J. 支持的协议/封装协议列表 K. 所支持的套接字传输器(Socket Transports)列表 L. PHP 类型及比较符表 M. 解析器代号列表 N. 关于本手册 O. Open Publication License P. 函数索引 Q. 补充说明 X. 微软 HTML 帮助版本 57. 关于此版本 58. Using PHP Manual CHM Edition 59. The Full Text Search 60. Specialities of this Edition 61. Integrating the PHP Manual 62. Skin development 63. CHM Edition Credits
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值