终于说到面向对象编程的基本方式了,在类里面,我们把变量称为属性,把函数称为方法,老外每提出一个新的概念就总喜欢做一些新的命名,这样做的好处在于,当年我们提到属性和方法时,总是显得比那些说变量和函数的人有学问。当然,实质上,它们完全是同一回事。
为什么要用类,按我个人的理解,最初,这多半是因为变量的作用域造成的。全局变量的安全性在C语言的入门教程里就开始提及的,不仅仅是容易产生漏洞被黑客入侵,更多的时候,自己编写代码时,也会因为全局变量的同名而产生各种预料不到的麻烦。而如果用参数传递每个变量,则会显得很累赘。由于有了netbeans这样卓越的编程工具,事实上,我并不用手工输入这些变量,而只是看着不爽而已。明明是多数函数或至少是一组函数都会用到的变量,偏偏要反复传值,总会觉得不舒服。于是,就有了类,并且,在PHP5.0之后,可以在类里面详细地定义属性(变量)和方法(函数)的作用域。
同时,用类的另外一个基本好处,就是可以把函数分组。当函数足够多的时候,会很难寻找,根据功能按类把函数分开,那些只供其他函数调用而不需要用户直接调用的方法,干脆设为私有,免得同事不慎调用出错,这样,一个公共的函数库就被完全分解为多个类了。
很多时候,一个类具备的基本功能是有普遍价值的,我们可以把一个类从一个项目中复制到另外一个项目,而完全不用担心出什么差错,这是没有自己属性值和作用域的函数组所无法做到的。
在这里,需要澄清的一个问题是,很多人都误认为把一个函数库分为多个会加速程序运行,他们的理解是每次页面只调用自己用到的那个函数库或是类,文件的容量小了,速度自然就快了。其实,实际情况是相反的,我们平时用电脑都知道,第一次打开一个WORD文件时,速度可能会比较慢,而关闭后不久第二次打开,速度就会快很多,这是因为,那个WORD文件和WORD软件本身,都被缓存到内存里了。同样道理,一个函数库,再怎么样也大不到哪里去,页面第一次调用时背缓存,接下来再次打开自然就快了很多;同时,如果一个页面本来包含一个函数库够了,如果分解后变成需要包含多个,文件寻道比加载需要花费更多的时间,所以即使是没有缓存的情况下打开页面,把一个函数库分解后,也会降低程序的执行速度;另外,类的实例化也是需要一定时间的。当然,以现在的计算机硬件而言,这些速度上的损失,是完全可以忽略不计的,所以,硬件的发展,也是面向对象方式编程开始流行的基础之一。
所以,在面向过程的程序中,我们还是会使用类,当然,在面向过程的程序中,只在三种情况下需要用类:
- 项目足够大,大到一个函数库会把人绕晕的时候;
- 我们发现自己写的某项功能具备通用性的时候;
- 我们调用之前写的类或是别人在网上发布的开源类的时候。
使用简单的类之后,你仍然不能宣称你的网站是面向对象的。我刚刚在这个帖子的标题后面加了个“(上)”,也就是说,在本文接下来的篇幅当中,我们仍然只谈面向过程中就可以使用到的技术,当然,它们也同样适合于面向对象。我将在下一个帖子里表述我对面向对象的理解。
摘自国际喜悦村
个人总结一句,变量就是属性,函数就是方法,函数分组就是类!
他么的,那么多人,愣是没有讲清楚,直接说变量,函数,函数分组,不就完了嘛,干!那些个砖家就喜欢弯弯绕,把人绕进去,在绕出来!