调试功能是ThinkPHP内置的一项重要的代码调试机制。ThinkPHP本身内置有代码调试功能,开发人员只需要在入口文件中开启即可。为了方便开发者了解每个页面的运行情况,系统还提供了Trace信息显示功能。图8-8 调试异常信息2.Trace异常信息Trace异常信息默认是关闭的,它是前面介绍的异常数据显示的子类。......
2023-11-04
Debug是一个系统静态扩展类,主要用于调试程序的性能,为优化程序运行效率提供依据。例如显示块代码内存占用、块代码执行时间、区间代码性能调用等。此外系统还提供了快捷函数G用于简单地测试代码性能,下面分别介绍。
1.Debug类
Debug类是一系统基类,用于测试代码执行性能。该类公开可调用的静态方法分别有:mark、useTime、useMemory、getMemPeak。其中mark方法为Debug类的核心方法,后面3个方法必须以mark为统计依据才能收集到代码执行性能数据,下面分别介绍。
(1)mark
mark是Debug调试类的核心方法,该方法不参与数据收集,只用于声明调试的开始与结束标记。假设需要对一个页面进行性能调试,那么首先需要在测试的代码之前加入标记,如以下代码所示。
如上述代码所示,由于Debug是一个系统扩展类,所以需要引入扩展。关于扩展的详细使用本书第11章将有详细介绍。在此读者只需要理解即可。mark方法只需传入一个参数即可,该参数是一个可自定义的字符串。例如run与end,表示代码调试从Debug::mark('run')开始,直到Debug::mark('end')结束。这对标记内的代码性能数据会被记录到$marker数组中。
如果要对一个完整的控制器动作代码进行调试,更理想的方法是在前动作和后动作中置入mark标记,这样更有利于代码管理,如以下代码所示。
为代码添加了标记后,系统就能够识别调试区域了。其他的3种方法分别用于获取代码运行时间、代码运行占用内存及代码占用内存的峰值。
(2)useTime
useTime用于收集标记区代码的运行时间,该方法共支持3个参数,表现形式为useTime($start,$end,$decimals=6)。其中start及end参数即为mark方法中对应的开始标记及结束标记;decimals表示时间统计精度。代码如下所示。(www.chuimin.cn)
如果动作中使用了缓存,useTime能够真实地收集到缓存后的运行时间,这对于缓存优化是非常有用的。
(3)useMemory
useMemory方法用于收集区间代码所占用的系统内存。该方法共支持两个参数,表现形式为useMemory($start,$end)。start及end参数分别代码mark方法中对应的开始标记及结束标记。useMemory的实际使用如以下代码所示。
在实际应用开发中,可以根据需要换算useMemory结果值。
(4)getMemPeak
useMemory得到的结果是区间代码最低占用率值与最高占用率值之间的平均值。而getMemPeak方法用于获取区间代码内存占用率的最高值,所以getMemPeak方法更具有参考意义。getMemPeak方法与useMemory方法无论参数还是什么都是一样的,在此就不再重复相关代码演示。需要说明的是,无论是useMemory还是getMemPeak,使用的前提都是Web服务器安装并开启了memory_get_usage函数,否则将获取不到任何数据。
2.G快捷函数
G快捷函数能够简单快捷地获取区间代码性能数据。相比Debug类,G快捷函数不需要引手动引入扩展类,只需要定义开始标记即可,结束标记是可选的。G快捷函数支持3个参数,表现形式为G($start,$end='',$dec=4)。其中start表示需要传入开始标记;end是可选参数,如果为空即表示以当前动作最后一行代码为基准;dec是可选参数,该参数值为数字类型,用于设定统计精度。使用G函数比较简单,如以下代码所示。
相对Debug类而言,G函数收集的信息比较简单,收集结果只有代码运行时间。但大多数情况下,根据代码执行的时间就可以得到代码的运行情况和效率。
有关PHP MVC开发实战的文章
调试功能是ThinkPHP内置的一项重要的代码调试机制。ThinkPHP本身内置有代码调试功能,开发人员只需要在入口文件中开启即可。为了方便开发者了解每个页面的运行情况,系统还提供了Trace信息显示功能。图8-8 调试异常信息2.Trace异常信息Trace异常信息默认是关闭的,它是前面介绍的异常数据显示的子类。......
2023-11-04
PHP 5后的版本借鉴了大量Java思想,得益于早期PHP面向过程编程支持,PHP在实现MVC设计中变得较灵活、易用。但是随着PHP 5.x的到来,各种MVC框架的出现,尤其Zend推出的Zend Framework,彻底地改变了PHP状况,使得PHP也能够实现优雅的Web编程。MVC设计模式将使代码将变得简洁。但是在MVC设计模式中,Index称为动作。当然,MVC只是一种设计模式,在开源的PHP编程世界中,已经拥有众多的MVC编程框架。......
2023-11-04
前面已经简单介绍过ThinkPHP视图引擎,这些标签处理机制类似于JSP tag,使用XML作为标签的渲染方式,开发人员可以方便地在网页中嵌入XML标签,然后由ThinkPHP视图引擎解释成标准的PHP代码。ThinkPHP的视图引擎之所以高效,主要体现在它的标签扩展性。ThinkPHP的视图标签扩展性够完美地与后台控制器代码相结合,例如在Smarty中使用函数功能,首先需要在后台PHP代码注册,而在ThinkPHP中完全不需要,如以下代码所示。......
2023-11-04
系统共支持7种模式扩展,下面将分别对最常用的几种模式进行介绍。表11-1 CURD操作接口如表11-1所示,参数$data表示传入或返回的数据信息;参数$options表示返回当前操作的模型名称及表前缀。......
2023-11-04
Eclipse是IBM的一个商业项目,2001年11月起IBM将Eclipse贡献给开源社区,从此奠定了Eclipse的地位。Eclipse通过PDT插件来提供PHP开发支持,Eclipse PDT能够让编写PHP变得简单和高效,下面将介绍Eclipse PDT的安装和使用。Eclipse PDT的安装有两种方式,一种是直接通过Eclipse的扩展进行安装;另一种是下载带PDT插件的Eclipse。下面将以Eclipse3.5.2作为基础,讲解Eclipse PDT插件的安装过程。如果下载带PDT插件的Eclipse,只需要双击Eclipse启动程序即可,此时Eclipse就提供了完美的PHP编程支持。......
2023-11-04
图12-2 SOAP服务如果服务没有开启,需要在PHP配置文件中开启,如以下代码所示。其中参数1表示SOA服务描述文件,即WSDL文件,该文件是SOAP通信的核心;参数2表示SOAP协议版本,常用的版本有1.0及1.2,本章内容及示例全部基于SOAP 1.2版本实现。使用普通的Firebug等插件不能获取到异常信息,而断点调试是PHP的弱项,所以调试问题将会是SOAP开发首要面对的问题。......
2023-11-04
下面通过示例代码,演示Cookie函数的实际应用。Cookie能够存放包括中文在内的字符,但长度需要控制在225个字符之内。通过前面的学习,相信读者已经能够掌握Session及Cookie的操作了。虽然Cookie存放于客户端,但是并不意味着Cookie不适合用于会员验证等场景。所以很多网站会使用加密的方式存放Cookie用户名及密码,甚至结合软件与硬件签名实现高度安全的Cookie。总而言之,使用Cookie存放登录数据是可行的,但要做好加密与解密相关操作。......
2023-11-04
比如MySQL服务器集群,只是由于习惯性的问题,多数程序员都称为分布式数据库。分布式数据库的特点是多台数据库服务器轮流对外提供服务,并提供冗余、容灾等基本功能,确保操作不中断。下面以默认的MySQL驱动为例,详细介绍ThinkPHP连接分布式数据库的过程。......
2023-11-04
相关推荐