书评Object-Orientated Programming with PHP5

 更新时间:2016年11月25日 16:10  点击:1307

突然接到Packt publishing的邮件,内容是关于”Object-Orientated Programming with PHP5“的书评。
以前从来没有做过书评,对于评论的样式内容结构的不合理,在此对读者表示歉意。

内容
简要概述,这本书的章节是:
面向对象(OOP)与程序设计(PS:应该是面向过程吧)(什么是OOP?,为什么要OOP?, 两者的区别等等)
开始 OOP (对象(封装),继承,多态等等)
高级OOP (使用 PHP 函数,异常,迭代等等)
设计模式Design Patterns (Strategy, Singleton, Adapter, Observer, Decorator etc)(这里就不译了)
反射和单元测试(phpUnit)
Standard PHP Library (著名的SPL)
OOP数据库 (MySQLi, PDO, 数据持久层Abstraction layers - PEAR::MDB2, ADODB and Active Record)
OOP和XML (SimpleXML, xpath, Dom)
MVC / Frameworks
针对初/中水平开发人员


支持
适当的介绍了 SPL (Standard PHP Library)
介绍了 PDO, PEAR::MDB2, AdoDB and MySQLi
介绍了主要的面向对象设计模式
介绍了MVC和frameworks(框架)

反对
只有250页
不够深入
很多语法错误,希望在出版的时候能够改正这些错误。
有很多拼写错误 (e.g. s/Mehod()/Method())
有些例子很差(请见下文)
十页的篇幅去讲PHPUnit API,在最后讲使用框架开发一个项目,我觉得应该利用一部分篇幅将一个主要的框架,例如zend或者codeignitor。话虽如此,我觉得这本书还是不错的,尤其是能学到别人怎么解决问题,这对于初中级开发人员会有很大的帮助。


代码实例
为了使这本书更有意思,第四章讲了很多主要的设计模式。其中一个decorator模式,部分代码如下:
 
$post = new Post();
$comment = new Comment();
$post->filter();
$comment->filter();
if($BBCodeEnabled==false && $EmoticonEnabled==false) {
    $PostContent = $post->getContent();
    $CommentContent = $comment->getContent();
}
elseif($BBCodeEnabled==true && $EmoticonEnabled==false) {
    $bb = new BBCodeParser($post);
    $PostContent = $bb->getContent();
    $bb = new BBCodeParser($comment);
    $CommentContent = $bb->getContent();
}
elseif($BBCodeEnabled==false && $EmoticonEnabled==true){
    $em = new EmoticonParser($post);
    // etc.
}

 本文作者:longlongago     博客地址:http://blog.111cn.net/longlongago2000

        寒假期间没事用asp做了一个写博的程序,后来想用php实现,于是就上网找到了php+mysql安装了,我找到的是安装自动配置的(phpStudyAdmin),很方便,安装好就可以用的,不用进行复杂的配置(听说配置很复杂,自己没试过)。

       开始学php,我知道要用实例来学php上手速度最快,想到我以前学asp是先做个简单的登录验证,做起来思想跟asp一样,都是表单的发送和接收,恰恰是这两个简单的动作在以后的编程中用得最多,可以说学会这两个动作你就开始入门了。我编写的代码如下:

登录:test1.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title><? echo "dskdfj|"."+++++++++++"; ?></title>
</head>

<body>

<form method="post" action="test2.php">
<table width="200" border="1">
  <tr>
    <td width="59">&nbsp;</td>
    <td width="115"><input type="text" name="text1" /></td>
    <td width="8">&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="text" name="text2" /></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><label>
      <input type="submit" name="Submit" value="提交" />
    </label>
    <input type="reset"

作者:老王

目前PHP社区里最成功的框架要数CakePHP,Symfony,ZendFramework了,有选择总是好事,不过选择多了也有烦恼,正所谓“有两块手表的人永远不知道准确的时间”。今天无聊,戏说一下我眼中PHP框架的味道。希望初学者选择框架时能有所参考。

CakePHP是一个完整的FullStack类型的框架。使用CakePHP架构程序的时候,感觉就好像是三军仪仗队齐步走,军人们胳膊和腿要什么节奏,什么位置等等,这些都必须按照规矩来,绝对不能开小差。

Symfony是一个介于FullStack类型和Glue类型之间的框架。使用Symfony架构程序的时候,感觉就好像是奥运会开幕式里运动员入场,虽然胳膊,腿的节奏,位置等也会有一些泛泛的要求,但大都不会强制如何如何,甚至你还可以对着观众招招手,对着摄像机做做鬼脸什么的。

ZendFramework是一个纯粹的Glue类型的框架,使用ZendFramework架构程序的时候,感觉和挤公交差不多,如果是在欧洲挤公交,大家基本上还都会遵守秩序上车,如果是在中国挤公交,你的胳膊,腿都得铆足了劲才行,那绝对是一场战争。

以上言论,皆为笑谈。大家也不必追问到底哪个好?哪个坏?应该听佛祖的,不要执著,^_^

 



PHP文件的源码都是明文,这对于某些商业用途来说,并不适合。
  因此考虑使用加密的手段保护源码。

  实在不耐烦等待zend出编译器,而且编译和加密本质上不是一回事儿。自己动手、开始修改。

一、基本原理

  考虑截获PHP读取源文件的接口。一开始,我考虑从Apache和PHP 之间的接口处 处理,参见apache的src/modules/php4/mod_php4.c (这个是PHP用static方式编译进apache,make install 后的文件),在send_php()函数中截获文件指针,采用临时文件的方式,解密后替换文件指针。这种方法经过测试实践,证明是可行的。但是,必须使用两次文件操作,效率低下,而且对于DSO方式不可采用。 双缘敬老院
  由此,重新考虑截获PHP读取文件并装载至缓存的过程,经过费力的寻找,发现在Zend引擎中zend-scanner.c是做此处理的。开始对此文件修改。照明工程

二、实现方法示意

  采用libmcrypt作为加 密模块,现在采用的是DES方法ECB模式加密,

下面是文件加密的源代码:

/* ecb.c-------------------cut here-----------*/
/* encrypt for php source code version 0.99 beta
we are using libmcrypt to encrypt codes, please
install it first.
compile command line:
gcc -O6 -lmcrypt -lm -o encryptphp ecb.c
please set LD_LIBRARY_PATH before use.
GNU copyleft, designed by wangsu , miweicong */

#define MCRYPT_BACKWARDS_COMPATIBLE 1
#define PHP_CACHESIZE 8192
#include < mcrypt.h >
#include < stdio.h >
#include < stdlib.h >
#include < math.h >
#include < sys/types.h >
#include < sys/stat.h >
#include < fcntl.h >


main(int argc, char** argv)
{

int td, i,j,inputfilesize,filelength;
char filename[255];
char password[12];
FILE* ifp;
int readfd;
char *key;
void *block_buffer;
void *file_buffer;
int keysize;
int decode=0;
int realbufsize=0;
struct stat *filestat;


if(argc == 3) {
strcpy(password,argv[1]);
strcpy(filename,argv[2]);
} else if(argc == 4 && !strcmp(argv[1],"-d")){
strcpy(password,argv[2]);
strcpy(filename,argv[3]);
decode=1;
printf("Entering decode mode ... n");
} else {
printf("Usage: encryptphp [-d] password filenamen");
exit(1);
}


keysize=mcrypt_get_key_size(DES);
key=calloc(1, mcrypt_get_key_size(DES));

gen_key_sha1( key, NULL, 0, keysize, password, strlen(password));
td=init_mcrypt_ecb(DES, key, keysize);

if((readfd=open(filename,O_RDONLY,S_IRUSR|S_IWUSR|S_IRGRP))==-1){
printf("FATAL:


最近,自己利用放假时间学PHP,可能大家都不知道PHP是什么呢?PHP是一种网页嵌入式语言,就同ASP,JSP一样,这应该是编程中最容易学习的语言。前几年自己在华师上夜大的时候,唯一学习的编程语言是C++。现在这个PHP编程很多地方与C++类似,所以被称为C++ --(即C加加减减)很有趣的称呼,哈哈!why?因为它没C++一样要使用指针比较复杂的结构类型罗!
     还有更有趣的称呼,在电脑界把php称为明灯(LAMP)WHY?原因在于php只是一种编程语言,它需要特定的环境才能运行,所以这个环境就叫做LAMP了,其实是包括四样东西(Liunx,Apache,Mysql,Php),liunx,就是同微软、window一样的操作系统,Apache就是服务器如同windows中的IIS(internet information server),Mysql就是数据库,同Access,Sqlserver,Oracle一样,因为现在的网页很多都是动态网页(这个动态不是单指画面的动态,更是强调动态地管理),PHP当然已经介绍过了是scrīpt language. [2008-2-9]
    我现在学习的是PHP当然要介绍它多一点啦!php其实就同普通我们上网看到的网页语言没什么区别,普通的网页是HTML语言,十分简单的语言,我在读大学的时候已经掌握了,但是要经常记住一些tags是很不容易,但是你学习网页必须要懂得这样,而PHP就是把语句嵌入在其中间,通过PHP解释器对其进行编译,这样就可以得出网页效果的,虽然学习这个容易要花一定的时间,但这种语言是方便我们平时的网页编辑,通过语句的编写这样可以减免对网页的重复制作,说真的是提高工作效率,很棒的!
     当然学习语言就像我们平时学习的english一样,要学习语法,句型等,当然没有英语语句这么多句型了,在编程语言中主要有三种结构(顺序、选择、循环结构),通过三种的结构的组合就可以编写网页和程序了。但编程语言更像的数学这科,因为有很多函数,但往往很多函数就是自己最容易不记得的。但没办法了,只有自己多点用吧!我最近在最具权威的www.php.net网站上下载了有关PHP的语法手册,这本手册不错,很通俗易懂是学习php语言的首选材料。另一个最具权威的网站是www.zend.net 这个网站,从资料中得知zend其实是两个人的名字合写在一起,这两个人就是当初php的发明者,现在成立了zend公司,听说这个公司也准备上市了,市场潜力也是很巨大的,最近IBM也就PHP的应用在其网站提供了相关的资料介绍。

     目前的网页变成语言都离不开与数据库的支持,这是一种很有用的技术支持,以前的网页都处于静态,很多资料都不能保存,现在数据库可以通过其严密的关系结构,使网页更具信息的系统性和安全性。目前流行的数据库很多,我自己也不清楚那些数据库软件好用,自己用过的有SQLSERVER,MYSQL,至于IBM强烈推荐的DB2 V9则没用过。[2008-2-10]

<
[!--infotagslink--]

相关文章

  • VBS中FileSystemObject对象详解(完整版)

    今天在脚本之家看了几篇关于vbs FileSystemObject的一些资料,发现不够详细与完整这里刚好发现了一篇更好的文章特整理一下,需要的朋友可以参考下...2020-06-30
  • js如何打印object对象

    js调试中经常会碰到输出的内容是对象而无法打印的时候,光靠alert只能打印出object标示,却不能打印出来里面的内容,甚是不方便,于是各方面整理总结了如下一个函数,能够将数组或者对象这类的结果一一打印出来,具体代码如下: fu...2015-10-21
  • 详解Javascript中的Object对象

    这篇文章主要介绍了详解Javascript中的Object对象,需要的朋友可以参考下...2016-03-01
  • java中JSONObject转换为HashMap(方法+main方法调用实例)

    这篇文章主要介绍了java中JSONObject转换为HashMap(方法+main方法调用实例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-14
  • 解决vue props传Array/Object类型值,子组件报错的情况

    这篇文章主要介绍了解决vue props传Array/Object类型值,子组件报错的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-07
  • win2003 安装软件之PHP5 图文安装教程

    本教程共分八篇:系统安装与设置篇、软件安装与设置篇、文件及文件夹权限篇、系统服务篇、安全策略篇、系统组件篇、注册表篇、软件安全篇。本篇讨论的是第二篇软件安装与设置篇的第七部分:安装软件之PHP 5 安装图解。 ...2016-01-27
  • JavaScript类型系统之Object详解

    对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象...2016-01-08
  • 深入理解JavaScript中的对象复制(Object Clone)

    下面小编就为大家带来一篇深入理解JavaScript中的对象复制(Object Clone)。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
  • 解决React报错Style prop value must be an object

    这篇文章主要为大家介绍了React报错Stylepropvaluemustbeanobject解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...2022-12-04
  • IIS 环境下配置PHP5+MySql+PHPMyAdmin

    虽然主要是做.net开发的,但是,时不时的还要搞一下php,但是,php在windows下的配置,总是走很多弯路,正好前几天又配置了一下,因此总结在这里,做为自己的备忘,也希望给遇到问题的朋友们提供一些帮助。...2016-01-27
  • C#中 dynamic、Object和var之间的实际区别是什么?何时使用它们?

    dynamic关键字和动态语言运行时(DLR)是.Net 4.0中新增的功能。 什么是动态编程语言有时可以划分为静态类型化语言和动态类型化语言。C#和Java经常被认为是静...2020-05-11
  • c# 所有类型都从Object类型派生

    所有的类型最终从object派生,每一个类型都有一组最基本的方法...2020-06-25
  • Delphi中使用ISuperObject解析Json数据的实现代码

    这篇文章主要介绍了Delphi中使用ISuperObject解析Json数据的实现代码,需要的朋友可以参考下...2020-06-30
  • PHP4和PHP5的配置异同比较

    配置php4或者php5的过程中,php4,5的配置的步骤大致一样的,但是配置内容有一些差别。在LINUX等环境下编译,一般来说,只要编译的选项正确,配置也就正确了;在windows配置则需要注...2016-11-25
  • C#实现xml文件反序列化读入数据到object的方法

    这篇文章主要介绍了C#实现xml文件反序列化读入数据到object的方法,涉及C#操作XML文件类型转换的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • thinkPHP5 tablib标签库自定义方法详解

    这篇文章主要介绍了thinkPHP5 tablib标签库自定义方法,结合具体实例形式分析了thinkPHP5标签库的定义、用法及相关注意事项,需要的朋友可以参考下...2017-05-21
  • PHP5正式版出炉

    Some of the key features of PHP 5 include: The Zend Engine II with a new object model and dozens of new features. XML support has been completely redone...2016-11-25
  • php7和php5的详细对比

    这篇文章主要介绍了php7和php5详细对比,对此感兴趣的同学,可以自己研究下...2021-04-19
  • PHP5中的三大特色功能

    PHP5 中的三大特色功能。这三大特点为:   * 新的对象模式 (New Object Mode)   * 异常处理 (Exceptions)   * 名称空间 (Namespace)      在开始之前,...2016-11-25
  • Windws下基于Apache的PHP4和PHP5共存

    在学习PHP过程中可能要同时用到PHP4和PHP5,网上也有不少关于二者共存的安装方法,大多是一个安装在IIS下,一个安装在Apache下。下面介绍一下本人的安装方法,自认为比较优化...2016-11-25