不谈功,只说过
2010-02-26
本书是基于php5&mysql5来讲解web开发技术的。是一本较早的全面介绍php面向对象编程技巧的书。书中使用的例子也都摒弃了面向过程的代码,全部使用面向过程的代码来进行讲解,无疑是一本很好的参考书。
本书好的地方自不必说,这里只谈书中的缺点。
首先是硬伤,在介绍面向对象的一些基本概念的时候,有明显的错误定义。
例如在P77,介绍静态成员变量时,有这么一句定义:静态成员变量不能被声明为public之外的范围级别。从字面上来讲,这显然是错误的。你完全可以定义一个protected static变量。
接下来举的例子中:
“php脚本调用之间不记忆任何内容,静态变量也不例外,每次重启脚本时,值都会被重置,下面的脚本永远输出10。”
class ABC
{
public static $value = 10;
}
ABC::$value++;
echo ABC::$value;
语言描述没有错,但例子举错了,这个脚本显然输出11,因为在输出前,脚本并没有重启。
其次是定义或解释有问题。
在P78解释::,->.self和$this的区别时:
“如果被引用的变量或者方法被声明为const或者static,那么就必须使用操作符->”,实事上如果非静态方法中没有$this的前提下,完全可以用::来调用非静态方法,不一定非要用->, 而且即使将方法声明为静态方法,也可以使用->来调用。其实整个这一段落,4条解释,都是错误的。好在这个错误,是建立在正确的基础上,也就是说,你照着做,不会有错,但你不照着做,也不一定错,错就错在“必须”二字上,其实是非必须的,有条件的。
还有很多类似上面这个例子的地方,感觉作者为了避免更多的解释,而做了一些草率的定义,有些更像是翻译没有理解到位而造成的。很多时候,翻译人员过于直译了,比如在P75,定义类常量的时候,有这么一句话:“常量是公共可用的,并且可以从任何位置使用。他们不和这个类的特定实例相关联,他们是和对象或者类型的类相关联的信息,并且因此你不能使用间接引用操作符(->)访问他们”。我相信初学者看了这句话一定都很头疼,我反复读了三遍才弄明白他想说什么,其实你不能用->去访问一个常量或者静态变量,是因为 “他们不和这个类的特定实例相关联,他们是和对象或者类型的类相关联的信息,所以静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用,所以不能够使用->”,如果直译过来并不能很好的解释,甚至造成误导的话,我觉得翻译人员在翻译完后有必要自己去增加一些说明的,否则我们用google translate就行了。
类似的模糊定义,在第4章,9章和第11章最严重,非常容易造成误导。所以在阅读这本书的时候,如果遇到自己感觉模棱两可,或者存在疑问的定义时,一定不要盲目的相信,要不怕麻烦的去查证。事实上这本书我读过三遍,每一遍都会发现一些新的不够合理解释。
另外在P18,讨论NULL是否区分大小写的时候,有个明显的硬伤,是由翻译造成的,感兴趣的人可以去看看,翻译文字中NULL是“区分大小写”的,实例证明是不区分的。而且实例中注释也标明了"case insensitive"。其他还有几处,我印象不是那么深刻了。有兴趣的可以去查一下,由此翻译的水平也可见一斑。
这本书胜在有一个好的结构,把web应用开发过程中的每一个知识点都cover住了,但对每一个知识点的讲解,都不够深入。建议的阅读方法是,根据书中的知识点,找针对该知识点的专业的书籍再进行阅读,才能够有效的避免被误导,并能加深对书中某些概念的理解。在阅读时及时查证相关概念,千万不要盲从。