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
应用日志是在MVC应用中开发人员手动记录的日志。手动记录可以将需要记录的信息保存到日志系统中,方便在系统出错时能够第一时间排查故障所在。手动记录日志虽然麻烦,但却是保证网站稳定、安全运行的关键,所以在实际应用开发中,应该要养成良好的日志记录习惯,无论对于系统维护人员还是后期的网站维护人员都是友好并重要的。
Log类提供了两种手动记录日志的方式:一种为立即写入;另一种分步写入。无论哪一种方式,对于开发人员而言都是简单易用的。下面分别介绍。
1.立即写入
立即写入是一种比较传统的日志记录方式,如果使用FILE记录方式,立即写入就等于写文件操作。立即写入使用write静态方法实现,该方法共有5个参数,表现形式为Log::write($message,$level,$type='',$destination='',$extra=''),参数作用如表8-6所示。
表8-6 write静态方法参数
除了参数message是必选项之外,其余参数都为可选项。所以最简单的手动记录日志代码如下所示。
2.分步写入
分步写入可以在一定程度上解决立即写入导致IO开销过大的问题。分步写入最大的特点是首先将日志信息暂存内存,在这一过程中程序的运行不受影响,由于可以避免CURD操作繁忙阶段,所以分步写入效率更加高。分步写入共分为两个步骤。首先使用record方法将日志写到内存中,直到开发人员手动调用save方法时日志信息才最终被永久保存。
(1)record方法(www.chuimin.cn)
record方法用于定义日志,例如日志的信息、级别等。record将收集到的信息保存到数组中,在这一过程中数组中的信息是临时性的,程序可以继续运行,也可以继续往数组中添加日志信息。record方法共支持3个参数,表现形式为record($message,$level=self::ERR,$record=false)。改变record方法参数值,可以改变日志的记录方式,如表8-7所示。
表8-7 record方法参数
(2)save方法
save方法不允许单独使用,需要配合record方法一起使用。一旦调用save方法,日志将会立即执行保存功能,该方法支持3个参数,表现形式为Log::save($type='',$destination='',$extra=''),参数值如表8-8所示。
表8-8 save方法参数
因为分步写入日志是首先暂时存放的,这就意味着一次可以写入多条日志记录,如以下代码所示。
ThinkPHP提供的日志功能比较传统,但开发人员可以重写Log类实现更加完善的日志系统。例如将日志保存到数据库、Memcache、消息队列、分布式文件系统、数据云中等,这些都可以通过重写Log类实现。当然更简单的方法是通过系统提供的扩展机制来实现,关于扩展功能的介绍,本书第11章将会全面介绍。
有关PHP MVC开发实战的文章
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
Json能够应用在许多场合,包括PHP本身就提供了对Json的反序列化操作。事实上,Json在传送大量数据时本身是存在溢出的,所以在设计时服务端要尽量避免输出大量Json数据。要达到前后台分离设计,使用Json通信最好不过了,因为主流的UI设计框架都对Json提供了完善的支持,下面将以Jquery为基础,详细介绍Ajax与Json的开发过程。由于使用Jsonp进行异步获取数据,所以Ajax异步通信变得简单。......
2023-11-04
在数据库开发中,查询和插入数据是同等重要的,ThinkPHP对数据的插入、更新等都做了高度封装,系统提供create方法,用于创建数据对象。图7-2 create创建数据流程2.create数据操作前面介绍了create方法的运行过程,读者只需要理解即可,在实际应用开发中创建数据的过程是极其简单的。下面将结合示例代码,介绍create方法的实际应用,加深对create方法的认识。一切完成后,此时数据对象存放于内存中,使用add方法进行提交,完成整个create创建数据的过程。......
2023-11-04
前面已经简单介绍过ThinkPHP视图引擎,这些标签处理机制类似于JSP tag,使用XML作为标签的渲染方式,开发人员可以方便地在网页中嵌入XML标签,然后由ThinkPHP视图引擎解释成标准的PHP代码。ThinkPHP的视图引擎之所以高效,主要体现在它的标签扩展性。ThinkPHP的视图标签扩展性够完美地与后台控制器代码相结合,例如在Smarty中使用函数功能,首先需要在后台PHP代码注册,而在ThinkPHP中完全不需要,如以下代码所示。......
2023-11-04
Zend Studio在6.0之前采用独立安装包进行发行。下面分别对经典的Zend Studio 5.5和成熟的Zend Studio 8.0进行讲解,方便读者选择。Zend Studio 8.0是Zend推出的商业套件,开发者或企业必须要购买商业许可才能进行使用。......
2023-11-04
系统共支持7种模式扩展,下面将分别对最常用的几种模式进行介绍。表11-1 CURD操作接口如表11-1所示,参数$data表示传入或返回的数据信息;参数$options表示返回当前操作的模型名称及表前缀。......
2023-11-04
ajaxReturn方法返回结果受DEFAULT_AJAX_RETURN配置项影响,默认值为json,可选的值有json、eval及xml。表9-1 ajaxReturn方法参数Model类中的select或find方法返回的数组原本就是关联数组数据,所以ajaxReturn能够很好地将结果转换为XML文档,如以下代码所示。......
2023-11-04
下面通过示例代码,演示Cookie函数的实际应用。Cookie能够存放包括中文在内的字符,但长度需要控制在225个字符之内。通过前面的学习,相信读者已经能够掌握Session及Cookie的操作了。虽然Cookie存放于客户端,但是并不意味着Cookie不适合用于会员验证等场景。所以很多网站会使用加密的方式存放Cookie用户名及密码,甚至结合软件与硬件签名实现高度安全的Cookie。总而言之,使用Cookie存放登录数据是可行的,但要做好加密与解密相关操作。......
2023-11-04
相关推荐