网上开店成功销售的密笈
快乐男孩 - 星期二, 三月 2, 2010

  昨天晚上和一个北京的朋友聊天,先是向我了解网站SEO的问题,后来慢慢的就了解到,原来他有一个网站,被百度K了,现在着急的不得了,因为,现在百度上已经几乎搜索不到他网站的页面了,对他的网上业务很是有影响。

  偶看到很多人在讲网络销售不是很理想,甚至有些人都放弃了,可这个朋友的话让我感到很困惑,为什么网店到了他的手里就如何的见效益呢?每天五个电话就能产生一个业务,每天做上几单几乎是小儿科的事情,天呐,难怪他想辞去现有的工作专门来做网上销售了。

  其实我最大的不解,就是他的网站只有简单的几个页面,也就是这样的网站居然就能够产生业务,搁谁都不会相信,可朋友现在却又踌躇满志的要大干一番。我想要了解原因,虽然我没有想过去做销售,三人行必有我师,更何况这么好的经验。于是便继续和朋友聊他的网站和他的网上业务。朋友说没有什么经验,我为他总结了以下的经验,和大家一起分享。
1、网站页面要简捷明了

  这一点我认同,从SEO的角度讲,网站页面简捷明了是搜索引擎最欢迎的,相比那些加杂了许多无关紧要的信息的网页,这样的页面连网站的访问用户都很喜欢,因为他能够一下子找到自己所需要的信息。

  但对于咱中国许多企业用户,他们却往往认为网站页面要设计的很好看才行,FLASH、图片等等能够用上的一定要用上,导航条需要效果,一般的CSS效果不能满足他的要求,就使用FLASH,JS下拉菜单的应用等等,其结果是看上去很美,却不实用,网站无法产生效益,回过头来开始怀疑互联网泡沬。这样的人有不少啊。

2、告诉客户真实的你

  网站上的介绍信息要真实。要想做到这一点还真不容易,现在社会就是这样,怀疑多了点,信任少了点,即便你说的是真的,别人也会觉得是假的,而那些说的假得不能再假的东西,有些人却又偏偏相信是真的。对于一个网站,尤其是销售产品的网站,就要让来访者相信你网站上的信息是真实的,你所做的服务承诺都能够兑现,产品的价格也是公道合理的。

  要做到这一点也不难,要想让别人相信你,首先你得学会诚实。具体怎么做,不需要多说了,自己琢磨吧!

3、态度很重要

  朋友告诉我态度很重要,刚开始做的时候,也没有那么多单子,做一段时间后,慢慢的总结经验,了解客户所想的和所需要的,经验多了,到了现在,基本上四五个电话就能产生一个业务,虽然还不是最理想,每个电话都能做成,但还有时间去学习。

  很多人做网店都因为态度问题让客户敬而远之,淘宝上许多网店做的比一些大公司都强悍,原因就在于此,态度决定一切。

4、以网站为中心建立自己的销售网

  这个标题写的有点大了,说白了就是自己的朋友圈,以网站为中心,是因为你做网上销售的,或许没有柜台,网站就是你的店面,得不断的让新老客户访问你的网站,再就是形成口碑,咱们买东西大都会问问朋友,朋友介绍的往往都让我们多信三分,所以网站就要多交朋友,让朋友带更多的朋友来。

  发这个贴子真不容易,中间断了几次,先总结这些,要忙别的事情去了。

Category:互联网 • Tags: , , , ,

三八妇女节为女生献上的礼物
快乐男孩 - 星期二, 三月 2, 2010

  很多商家希望能够卖出更多的产品,很多商家却又不知道如何促销他的产品,实际行与与希望总在不知不觉的时候拉开了距离,客户是需要多多关心的,学会了关心客户所想所需要的商家,总能够抢先发现商机。
  三八妇女节的专题从昨天便开始制作了。恰适逢学生即将开学,因此这个专题的重点在于去组织针对女生消费群体的产品,做一个导购专题。在向编辑询问的时候,大都反映商家还没有促销活动,言下之意就是商家没有促销,自己便无法按要求采编出相应的新闻来。

  等待不是一个好现像。我决定不再让这些编辑等待着商家提信息去采编,编辑应当是个小蜜蜂,不仅仅只采回来花粉而不做任何加工,那样又如何能产生蜂蜜呢?商家的客户是消费者,我们的客户是商家。我们应当去关心关注他们的需要,为他们提供相应的服务,仅是机械的配合客户工作,是不会让客户产生应有的效益的,就谈不上大客户维护。

  在专题策划案里,我加了明确的一条,采编回来的行情必须有对应的促销内容。促销有很多形式,即便是同样一种形式,也会因为产品的不同、促销的设置差异而使得结果各异,这样就够了。之所以强加这一条,主要是这个专题的精要在于此,女生喜欢什么?女生购物的心理是什么样的?每个参与专题的人应当以另一种身份参透一下这个。

Category:工作 • Tags: , , ,

哈维硬件网春季IT招聘专题成功了
快乐男孩 - 星期天, 二月 28, 2010

  春节回来第一天上班,便着手按排制作春季IT招聘专题,原计划需要用一周的时间,在三天内便完成了专题制作。进入哈维硬件网网站管理后台,这个专题的访问量已经高于以前专题的平均访问量。

  之所以能够在较短的时间完成这个专题,主要是因为这几天招聘的电脑公司很多,也因此,我在论坛里发文评论说,这是个怪圈。每年这个时候各大电脑公司都在招聘,为招聘烦恼。何不想想这些人为什么会选择在这个时候离职呢?

  年终奖是祸害,很多人都在等年终奖,发完了年终奖但走人已经成了许多人的选择。那么作为一个企业除了年终奖,是否还有其他的办法来挽留人才?

Category:工作 • Tags: , , , ,

博客升级,使用WordPress作为博客程序
快乐男孩 - 星期天, 二月 28, 2010

  买了VPS以后,我便按计划把博客等转移到新的服务器上,原本可以不对博客改动的,但在整理资料文件的时候发现它已经占用很大的空间了,光里面的视频就超过了1G,想想在博客里也没有太大的必要放那么多的视频,便决定换个博客程序使用。

  WordPress以前就试用过,觉得还不错,并且中文版也早就出来了,便决定使用它作为自己的博客程序。

  以前的博客需要转过来一部分,好在WordPress可以在添加日志的时候更改发布日期,因此,以前发布日志的日期仍旧可以保留,想批量转过来,却一时没有时间去修改程序。

Category:工作 • Tags: , , ,

当辞职成为一个选择
快乐男孩 - 星期三, 二月 24, 2010

  这两天在忙着做哈维硬件网的IT行业春节招聘专题,群里的电脑公司都在讨论招聘的事情,都在忙着,每年都如此,我在想,这些人会在思考吗?难道就没有办法跳出这样的怪圈吗?

  闲暇之余做了一个小调查,调查的题目取自互联网,偶没有什么高深的社会经验,自然做不出来具有较高价值的调查表来,拿来主义是最好的选择。

  如果你正在考虑辞职不妨做做这个调查,它会有一些建议给你。网址:http://www.eisong.cn/demission/

Category:工作 • Tags: , , ,

登录UUCALL后,我的帐户余额减少了?!
快乐男孩 - 星期四, 二月 4, 2010

  今天是立春了,UUCALL也回来了,欣喜地去登录UUCALL。
  桌面软件提醒我要升级,确认升级。。。
  网站提醒我要转入新系统,确认转入,填写我的邮箱地址。。。
  进入网站帐户中心后,却发现。。。
  我的帐户余额减少了,还好,软件界面上还显示着老的余额,便截了一个图片。
  朋友们有遇到这样的事吗??找谁投诉去?

Category:生活 • Tags: , , ,

提升PHP速度全攻略
快乐男孩 - 星期六, 十月 25, 2008

  PHP的优点之一是速度很快,对于一般的网站应用,可以说是已经足够了。不过如果站点的访问量很高、带宽窄或者其它的因素令服务器产生性能瓶颈的时候,你可能得想想其它的办法来进一步提高PHP的速度了。这篇文章将从几个方面介绍如何做到这一点,从而令用户浏览的时候更加“爽”。 

代码优化 

  在这里并不想再次告诉你如何写更干净的代码,这一点我想每个人都清楚,在需要速度的时候,你可能已经在PHP源代码的优化上面做了不少的工作,这里所提出的是,这个烦琐的工作可以交由其它工具来完成。这就是Zend Optimizer,此程序可以从Zend Technologies的网站(http://www.zend.com/)免费得到。它的原理很简单,通过检测Zend引擎产生的中间代码,并且优化它来得到更高的执行速度。我认为优化代码是一项颇烦琐的工作,而且优化后的代码可能变得难以理解,尤其是当你放下该PHP程序一段时间后,突然间客户要求你做一些修改时,可能你自己也不懂了;-)。因此我建议你在PHP的源代码较为复杂的时候,用Zend Optimizer来做这个优化的工作,好处是它不会令你的代码变得复杂难懂。 

  安装Zend Optimizer是非常简单的。只要根据你使用的平台,下载相关的预编译库,并且在你的php.ini中加入两行,重新启动你的web服务器就行了! 

zend_optimizer.optimization_level=15 
zend_extension=”/path/to/ZendOptimizer.so” 
zend_loader.enable=Off 

  你可能有点奇怪,不是说两行吗,怎么变成三行了。不过第三行是可选的,看来禁止这个zend_loader将会令优化的速度更快,因此不妨在你的php.ini文件中多加这一行。要注意的是:只有在你不使用Zend Encoder Runtime的时候,才可以禁止zend_loader,关于Zend Encoder Runtime,还会在下文提到。 

要更快吗?使用cache(缓冲)吧 

  如果你的PHP应用还需要更快的速度,下一个办法是缓冲。要实现这一点,有几种不同的方式。我自己就试用过Zend Cache(评测版本),APC和Afterburner Cache。 

  以上提到的都是“缓冲模块”。它们的原理都差不多,在php文件被首次请求的时候,通过将你的PHP源代码的中间代码存储在web服务器的内存中,对于以后同样的请求,都直接提供内存中的“编译”版本。由于它可以令磁盘的访问达到最小化,因此这个方法确实可以极大地提高PHP的性能。更为方便的是,当你的PHP源代码修改时,缓冲的模块可以察觉到这些变化,并且重新载入一样,因此你不必担心客户得到的是旧版本的程序。这些缓冲的模块确实不错,但是我应该选用哪一种呢?下面分别介绍一下: 

  Zend Cache是Zend Technologies的一个商业化的产品(它也是免费为我们提供PHP引擎和Zend Optimizer的公司)。它确实不错。在首次运行后,你可以明显察觉到PHP的速度得到了很大的提高,服务器的空闲资源也更多了。缺点是你要付费购买它,但就性价比来说,还是非常值得的。 

  Afterburner Cache是Bware Technologies(http://bwcache.bware.it/)提供的免费缓冲模块。当前还只是beta版,它所做的工作看来与Zend Cache差不多,不过性能的提高就比不上Zend Cache,而且现有的版本不能和Zend Optimizer一起工作,不过它是免费的。 

  APC(Alternative PHP Cache)是由Community Connect(http://apc.communityconnect.com/)提供的另一个免费模块。它的工作很稳定,速度也有不少的提高,要注意的是,我还没有找到一个官方的测试数据,这些只是在我的应用上作测试,因此不能下一个结论。 
Web内容的压缩(令你客户用起来更“爽”) 

  经过以上两个的方法,相信你的PHP应用的性能已经得到了很大的提高,现在该从另一个方面来考虑了:下载速度。如果你的应用只是在公司内跑,所有的客户都使用100Mb/s的以太网连接到服务器,这可能不是一个问题,但是如果你的客户中有使用慢速的modem连接的,你就要考虑使用内容压缩这个方法了。根据IETF的规范,大多数的浏览器都支持gzip的内容压缩。这意味着你在将web的内容发给客户的浏览器前,可以先使用gzip进行压缩,浏览器在接收的时候就会自动解压数据,并且令用户看到原来的页面。同样,压缩web页面的内容也有几个不同的方法。 

  mod_gzip是Remote Communications(http://www.phpbuilder.com/columns/www.remotecommunications.com)免费提供的一个Apache模块,它可以压缩静态的web页面。它工作得很好,你只需要将它和apache一起编译就行了(或者将它作为一个DSO使用)。Remotecommunications的人说它还可以压缩动态的内容,包括mod_php, mod_perl等。不过我尝试了一下,看来并不行。我在mod_gzip的邮件列表中了解到,这个bug将在下一个版本中修正(我想应该是1.3.14.6f版本)。不过你仍然可以用它作静态内容的压缩。 

  不过我们还想压缩动态的内容,因此我们必须找另外的办法。一个办法是使用class.gzip encode.php(http://leknor.com/code/),只要在你的PHP脚本中的开头和结尾调用这个PHP类,就可以压缩你的页面内容。如果整个站点都需要这样的压缩,你可以在你的php.ini文件中的auto_prepend和auto_append中调用这些函数。它工作得很好,不过在负载很重的站点上,它明显会带来一点的系统开销。要详细了解它是如何工作的,可以看一下它的类代码(你至少需要在编译PHP时加入zlib支持)。作者在里面的说明也非常详细,你可以得到任何需要了解的东西。 

  在最近,我也看到了一篇关于PHP输出缓冲的文章。它说的是PHP4.0.4推出了一种新的输出缓冲的处理手段–ob_gzhandler,它的作用和上面介绍的类相同,但区别是你只要在你的php.ini中使用以下的句法就行了: 

output_handler = ob_gzhandler ; 

  这样将激活PHP的输出缓冲功能,并且压缩所有它发送的东西。出于某些特别的原因,如果你不想在这里设置的话,只在需要的地方才改变这个默认设置的话(不压缩),只要在需要压缩的PHP源码目录中,修改一下.htaccess文件就行了,使用的句法如下: 

php_value output_handler ob_gzhandler 

… 或者直接在你的PHP代码中调用它,以下面的方式: 

ob_start(“ob_gzhandler”); 

  这个输出缓冲处理的方法很好,并且不会为服务器带来额外的系统开销。我十分建议你使用这种方法。它的改变可以用以下的例子说明,如果客户使用的是28.8K的modem的话,经过这个处理,他将会认为突然间换成了一个ISDN接入一样。要注意的一点是:Netscape Communicator并不支持图象的压缩,所以将显示不出来。因此除非你的客户全部使用Internet Explorer,否则你必须禁止压缩jpeg和gif图象。其它文件的压缩应该没有问题,但是我建议你最好测试一下,特别是浏览器使用了不常见的插件或者是少人用的浏览器。 

其它有用的东西… 

  Zend Technologies的在线商店在今年1月24开通了,并且售卖一些与PHP相关的有趣产品。包括前面提到的Zend Cache,Zend Encoder(简单说来,是PHP代码的编译器,可以产生编译的类,这样你就可以售卖给顾客而不用担心泄露源代码。在需要运行这些类的web服务器上,将要使用Zend Encoder Runtime来解码),Zend Ide(一个为PHP而设的集成化开发环境,带有很多强大的性能),还有为PHP开发者提供的支持服务。 

结论 

  使用这篇文章提到的技术,你将可以极大地提高站点的性能,不过请注意以下几点: 

1.瓶颈或许不在PHP,你需要考察应用中的每个对象(例如数据库) 
2.一个web服务器的性能都是有限制的,因此,不要认为性能不好就是PHP的原因,也可能是访问量很大,你的服务器需要升级了,或者考虑使用负载均衡的系统(将会花很多钱) 
3.不要认为内容压缩不重要,在100Mb/s的局域网中,你的PHP应用或许性能很好,但要考虑到使用慢速modem的用户。 
本文转自 李魁的博客 原文地址:http://cahlk.com.cn/article/show/6.shtml

Category:php • Tags: , , ,

百度与站长-使百度有效收录
快乐男孩 - 星期五, 十月 24, 2008

  百度喜欢结构简单的网页,具有复杂结构的网页可能无法顺利登录百度。您在进行网页设计时应尽量:

1. 给每个网页加上标题

  网站首页的标题,建议您使用您的网站名称或公司名称,其它网页的标题建议与每个网页内容相关,内容不同的网页不用相同的标题。

2. 不要把整个网页做成一个Flash或是一张图片

  百度是通过识别网页源代码中的汉字来认识每一个网页的。如果您的整个网页是一个Flash或一张图片,百度在网页中找不到汉字,就有可能不收录您的网页。

3. 不对网页做重定向

  重定向的网页可能不容易登录百度。

4.不在网页中使用Frame(框架结构)

5.不在网页中使用过分复杂的Java Script

  某些Java Script的内容对于搜索引擎是不可见的,所以不能被识别和登录。

5.静态网页能更顺利登录百度,动态生成的网页不容易登录百度

  ·如果您的网页url中含有如asp、?等动态特征,网页就可能被认为是动态网页。 
  ·如果您的网站中有很多网页必须做成Frame结构或动态网页,那么建议您至少把网站首页做成简单的网页,并且对网站内的一些重要网页,在首页加上链接。

6. 不要对搜索引擎进行作弊

  作弊的网站不能登录百度,即使登录后也随时可能被删除。

作弊网站定义

  对搜索引擎作弊,是指为了提高在搜索引擎中展现机会和排名的目的,欺骗搜索引擎的行为。
  以下行为都可能被认为是作弊:
  · 在网页源代码中任何位置,故意加入与网页内容不相关的关键词;
  · 在网页源代码中任何位置,故意大量重复某些关键词。即使与网页内容相关的关键词,故意重复也被视为作弊行为;
  · 在网页中加入搜索引擎可识别但用户看不见的隐藏文字。无论是使用同背景色文字、超小字号文字、文字隐藏层、还是滥用图片ALT等方法,都属于作弊行为;
  · 故意制造大量链接指向某一网址的行为;
  · 对同一个网址,让搜索引擎与用户访问到不同内容的网页(包括利用重定向等行为);
  · 作弊行为的定义是针对网站而不是网页的。一个网站内即使只有一个网页作弊,该网站也被认为是有作弊行为;
  · 有链接指向作弊网站的网站,负连带责任,也会被认为是作弊(但是,作弊网站上链接指向的网站,不算作弊)。 

作弊网站害处

  根据网页的作弊情况,会受到不同程度的惩罚:
  · 较轻微的惩罚,是系统在给网页排名时略为降低该网页的排名;
  · 较常见的惩罚,是作弊网站的某些关键词(或所有关键词)的排名降到其它任何网站之后;
  · 较严厉的惩罚,对于作弊行为和后果特别恶劣的网站,将从百度中消失;
  · 特别补充,含恶意代码或恶意插件等用户极端反感内容的网页,虽然不是作弊,但只要用户投诉,一经确认也会被百度拒绝收录;

作弊网站举报信箱

spam@baidu.com

Category:SEO • Tags: , , ,

博客调用功能进行了完善
快乐男孩 - 星期五, 十月 24, 2008

  使用这套博客系统后,发现存在一些问题,主要是热门文章的调用问题,以为是下载的版本不对,重新下载了一下,版本号也是一样的,版本不存在什么问题,那一定是代码的问题了,于是自己对整套系统做了一次全面的检查,主要是我想对博客增加相册功能,查看了一下官方的论坛和博客,相册方面一直都欠缺,所以也顺便熟悉这套程序。
  说明一下,我使用的博客系统信息如下:

O-blog 3.0 beta
—————————————————–
作者  Longbill
版本  3.0 beta
发布 2008/2/20 
环境 php mysql
——————————————————
下载  : http://www.longbill.cn/down/o-blog3beta.rar
演示 :  http://www.longbill.cn
Email:  shirui@gmail.com  
  longbill.cn@gmail.com
支持 :  http://www.phpBlog.cn  
  http://www.longbill.cn
论坛 :  http://bbs.phpBlog.cn

  使用中发现存的问题主要是热门文章的调用,在LONGBILL的博客上我看到有调用热门文章,可为什么我自己的博客不行呢?

  仔细检查了相关的代码,首先发现这部分没有使用缓存,直接读取数据库的,文件在class/hotestblog.php里,与是我对照着lastblog的调用方式将这部分改成了缓存模式,但还是无法调用出来内容。看来问题不是在这个地方。

  检查首页index.php文件,呵呵,终于看明白了这部分显示的机理,原来在显示首页内容相关的地方有这么一段代码

$mainT->assign(“lastblog”,”$lastblog_data”);
$mainT->assign(“hotestblog”,”$hotestblog_data”);
$mainT->assign(“lastRemark”,”$lastRemark_data”);

  中间的那段就是我后来添加上去的,呵呵,刷新一下页面,已经显示出来了。

  除了在首页,我也希望在文章显示页面调用热门文章和最新文章,这部分的调用主要是通过js/load.php文件来实现,查看一下,调用热门文章的代码没有问题,那么就在js/common.jp里了,因为这部分使用的是java技术。打开这个文档,很快就找到了这部分代码:
  if ($(‘lastremark’)) $(‘lastremark’).innerHTML = lastremark; 
         if ($(‘hotestblog’)) $(‘hotestblog’).innerHTML = hotestblog; 
         if ($(‘calendar’)) $(‘calendar’).innerHTML = calendar;

  中间的那行代码是后加上去的,刷新一下页面,已经显示出来了。

  每一次都是这样,改好后发现实际上并没有多么复杂,可当你面对一个不熟悉的系统程序时,往往是要走许多弯路,查看许多不必要的代码段。没得办法,谁让同行们写程序的习惯都不一样呢。

Category:工作 • Tags: , , , ,

php4和php5区别
快乐男孩 - 星期五, 十月 24, 2008

  PHP5 中的对象已经进行了较系统、较全面的调整,现在的样子可能看起来会有些类似于 Java。本小节着重讲述 PHP5 中新的对象模式,并举了一些较简易的例子来说明。就让本节成为你的 PHP5 之旅的一个新起点吧。:) 

构造函数和析构函数 
* 对象的引用 
* 对象的克隆 
* 对象中的私有、公共及受保护模式 
* 接口 (Interfaces) 
* 抽象类 
* __call 
* __set 和 __get 
* 静态成员 

构造函数和析构函数 

  在 PHP4 中,当函数与对象同名时,这个函数将成为该对象的构造函数,并且在 PHP4 中没有析构函数的概念。 
  在 PHP5 中,构造函数被统一命名为 __construct,并且引入了析构函数的概念,被统一命名为 __destruct。 

例一:构造函数和析构函数 

class foo { 
var $x; 
function __construct($x) { 
$this->x = $x; 

function display() { 
print($this->x); 

function __destruct() { 
print(“bye bye”); 


$o1 = new foo(4); 
$o1->display(); 
?> 
在上面的例子中,当你终止调用 foo 类的时候,其析构函数将会被调用,上例中会输出 “bye bye”。 

对象的引用 

众所周知,在PHP4 中,传递变量给一个函数或方法,实际是把这个变量做了一次复制,也就意味着你传给函数或方法的是这个变量的一个副本,除非你使用了引用符号 “&” 来声明是要做一个引用,而不是一个 Copy。在 PHP5 中,对象总是以引用的形式存在的,对象中的赋值操作同样也都是一个引用操作。 

例二:对象的引用 

class foo { 
var $x; 
function setX($x) { 
$this->x = $x; 

function getX() { 
return $this->x; 


$o1 = new foo; 
$o1->setX(4); 
$o2 = $o1; 
$o1->setX(5); 
if($o1->getX() == $o2->getX()) print(“Oh my god!”); 
?> 

对象的克隆 

如上所述,当一个对象始终以引用的形式来被调用时,如果我想得到该对象的一个副本,该怎么办呢?PHP5 提供了一个新的功能,就是对象的克隆,语法为 __clone。 

例三:对象的克隆 
class foo { 
var $x; 
function setX($x) { 
$this->x = $x; 

function getX() { 
return $this->x; 


$o1 = new foo; 
$o1->setX(4); 
$o2 = $o1->__clone(); 
$o1->setX(5); if($o1->getX() != $o2->getX()) print(”Copies are independant”); 
?> 
对象克隆的方法在其它很多应用程序语言中都是存在的,所以你不必担心它的稳定性。:) 

对象中的私有、公共及保护模式 

  PHP4 中,一个对象的所有方法和变量都是公共的,这意味着你可以在一个对象的外部操作其中的任意一个变量和方法。PHP5 引入了三种新的用来控制这种存取权限的模式,它们是:公共的(Public)、受保护的(Protected)及私有的(Private)。 

公共模式(Public):允许在对象外部进行操作控制。 
私有模式(Private):只允许本对象内的方法对其进行操作控制。 
受保护模式(Protected):允许本对象及其父对象对其进行操作控制。 

例四: 对象中的私有、公共及受保护模式 

class foo { 
private $x; 
public function public_foo() { 
print(“I’m public”); 

protected function protected_foo() { 
$this->private_foo(); //Ok because we are in the same class we can call private methods 
print(”I’m protected”); 

private function private_foo() { 
$this->x = 3; 
print(”I’m private”); 


class foo2 extends foo { 
public function display() { 
$this->protected_foo(); 
$this->public_foo(); 
// $this->private_foo(); // Invalid! the function is private in the base class 

} $x = new foo(); 
$x->public_foo(); 
//$x->protected_foo(); //Invalid cannot call protected methods outside the class and derived classes 
//$x->private_foo(); //Invalid private methods can only be used inside the class $x2 = new foo2(); 
$x2->display(); 
?> 
提示:对象中的变量总是以私有形式存在的,直接操作一个对象中的变量不是一个好的面向对象编程的习惯,更好的办法是把你想要的变量交给一个对象的方法去处理。 

接口 (Interfaces) 

众所周知,PHP4 中的对象支持继承,要使一个对象成为另一个对象的派生类,你需要使用类似 “class foo extends parent” 的代码来控制。 PHP4 和 PHP5 中,一个对象都仅能继承一次,多重继承是不被支持的。不过,在 PHP5 中产生了一个新的名词:接口,接口是一个没有具体处理代码的特殊对象,它仅仅定义了一些方法的名称及参数,此后的对象就可以方便的使用 ‘implement’ 关键字把需要的接口整合起来,然后再加入具体的执行代码。 

例五:接口 

interface displayable { 
function display(); 

interface printable { 
function doprint(); 

class foo implements displayable,printable { 
function display() { 
// code 
} function doprint() { 
// code 


?> 
这对提高代码的可读性及通俗性有很大的帮助,通过上面的例子可以看到,对象 foo 包含了 displayable 和 printable 两个接口,这时我们就可以清楚的知道,对象 foo 一定会有一个 display() 方法和一个 print() 方法,只需要去了解接口部分,你就可以轻易的操作该对象而不必去关心对象的内部是如何运作的。 

抽象类 

抽象类不能被实例化。 
抽象类与其它类一样,允许定义变量及方法。 
抽象类同样可以定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行。 

例六:抽象类 

abstract class foo { 
protected $x; 
abstract function display(); 
function setX($x) { 
$this->x = $x; 


class foo2 extends foo { 
function display() { 
// Code 


?> 

__call 

PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。 

例七:__call 

class foo { 
function __call($name,$arguments) { 
print(”Did you call me? I’m $name!”); 

} $x = new foo(); 
$x->doStuff(); 
$x->fancy_stuff(); 
?> 
这个特殊的方法可以被用来实现“过载(overloading)”的动作,这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。 

例八:使用 __call 实现“过载”动作 

class Magic { 
function __call($name,$arguments) { 
if($name==’foo’) { 
if(is_int($arguments[0])) $this->foo_for_int($arguments[0]); 
if(is_string($arguments[0])) $this->foo_for_string($arguments[0]); 

} private function foo_for_int($x) { 
print(”oh an int!”); 
} private function foo_for_string($x) { 
print(”oh a string!”); 

} $x = new Magic(); 
$x->foo(3); 
$x->foo(”3″); 
?> 

__set 和 __get 

这是一个很棒的方法,__set 和 __get 方法可以用来捕获一个对象中不存在的变量和方法。 

例九: __set 和 __get 

class foo { 
function __set($name,$val) { 
print(”Hello, you tried to put $val in $name”); 

function __get($name) { 
print(”Hey you asked for $name”); 


$x = new foo(); 
$x->bar = 3; 
print($x->winky_winky); 
?> 

类型指示 

在 PHP5 中,你可以在对象的方法中指明其参数必须为另一个对象的实例。 

例十:类型指示 

class foo { 
// code … 

class bar { 
public function process_a_foo(foo $foo) { 
// Some code 


$b = new bar(); 
$f = new foo(); 
$b->process_a_foo($f); 
?> 
可以看出,我们可以显性的在参数前指明一个对象的名称,PHP5 会识别出这个参数将会要是一个对象实例。 
静态成员 

静态成员和静态方法在面象对象编程的术语中被称作 “对象方法(class methods)” 和 “对象变量(class variables)”。 
“对象方法” 在一个对象没有实例化前允许被调用。同样,“对象变量” 在一个对象没有实例化前可以被独立操作控制(不需要用一个对象的方法来控制)。 

例十一:对象方法和对象变量 

class calculator { 
static public $pi = 3.14151692; 
static public function add($x,$y) { 
return $x + $y; 


$s = calculator::$pi; 
$result = calculator::add(3,7); 
print(”$result”); 
?> 

异常处理 

异常处理是公认的处理程序错误的理想方法,在 Java 及 C++ 中都有这个概念,我们欣喜的看到,在 PHP5 已经加入了这方面的应用。你可以尝试使用 “try” 和 “catch” 来控制程序的错误。 

例十二:异常处理 

class foo { 
function divide($x,$y) { 
if($y==0) throw new Exception(“cannot divide by zero”); 
return $x/$y; 


$x = new foo(); 
try { 
$x->divide(3,0); 
} catch (Exception $e) { 
echo $e->getMessage(); 
echo “n 
n”; 
// Some catastrophic measure here 

?> 
上例中,我们使用了 “try” 来执行花括号中的语句,当有错误发生的时候,代码会把错误交给 “catch” 子句来处理,在 “catch” 子句中,你需要指明要把错误交给某个对象处理,这样做可以使代码结构看起来更清晰,因为现在我们可以把所有的错误信息交给一个对象来处理。 
自定义错误处理 

你可以很方便的用自定义的处理错误的代码来控制你的程序中的意外。你仅仅需要从异常类中派生出一个自己的错误控制类,在你自己的错误控制类中,你需要有一个构造函数和一个 getMessage 方法,以下是一个例子。 

例十三:自定义错误处理 

class WeirdProblem extends Exception { 
private $data; 
function WeirdProblem($data) { 
parent::exception(); 
$this->data = $data; 

function getMessage() { 
return $this->data . ” caused a weird exception!”; 


?> 
现在我们可以使用 “throw new WeirdProblem($foo)” 来抛出一个错误句柄,如果错误在 “try” 的代码块中发生,PHP5 会自动把错误交给 “catch” 部分来处理。 
名称空间 

名称空间对类的分组或函数分组很有用。它可以把一些相关的类或函数给组合到一起,方便以后调用。 

例十四:名称空间 

namespace Math { 
class Complex { 
//…code… 
function __construct() { 
print(”hey”); 


} $m = new Math::Complex(); 
?> 
注意你需要在何种情况下使用名称空间,在实际运用中,你可能会需要声明两个或多个名称一样的对象来做不同的事情,那么你就可以把他们分别放到不同的名称空间中去(但接口是要相同的)。
本文转自 李魁的博客 原文地址:http://cahlk.com.cn/article/show/8.shtml

Category:php • Tags: , ,