Browsing all articles from 四月, 2009
28
12

谈面向对象的思维方式..

Author Jessica     Category 本站原创     Tags

这个标题有点大..我能说多少说多少..因为我也是个菜鸟..如果其中有些理解跟您有出入..还望指教..有争议才可以进步:)..

新手为什么总抱怨面向对象编程(以下简称OOP)难学??
新手为什么总无法深刻的理解OOP的思想??
能写出一个合格的类就代表你理解了OOP的思想了吗??
什么样才算真正的理解了OOP??
OOP难在什么地方??为什么我总是学不会??

相信很多人和我一样..在学习OOP的时候总会有上面那么多的问题..不过不要紧.我们今天就来探讨一下这些问题..

我个人认为..很多人都认为会写一个类就理解了OOP的思想了…这个思路是错误的..这就是为什么很多人虽然会写类了..但是写出来的类很“畸形”..究其根源..还是因为没有深刻的理解OOP的思维.

我建议大家..努力学习OOP基础..先不要去尝试写一个值得骄傲的类..你扪心自问..你虽然可以写出一个优秀的类.但是你理解了OOP了吗??

现在对于广大的PHPer来说..一个非常困难就在眼前..不光是我们这些菜鸟..就连一些著名的开源程序也一样..对于OOP非常不明确..

根据我的理解.我觉得大部分人写出”畸形”的类还是对OOP没有理解的非常深刻..那么好..今天我们大家就来探讨一些这个问题…

我们首先得知道.这个世界为什么会有OOP.为什么会出现OOP..一个事物从出现到发展.到今天的大红大紫..肯定有它无可替代的优越性..这种优越性经过这么多年的发展…很有必要普及到每个程序员..因为作为一名程序员.一定要有这样的思想..你的程序不是写给你自己的..你的程序是写给他人甚至后人看的..一段优美的代码也许一个程序员一生只能写出一段.但是这段代码也许会对以后发生惊人的意义..所以建议大家以后写代码.不要为了赶时间.不要为了着急实现某项功能..希望大家仔细锤炼代码..仔细思考..这对于你本人也是一种提高..

其次我们得理解为什么程序最初是面向过程的..也就是为什么会先有C而不是先有C++..好像这是个人类学的问题.或者说是一个哲学问题..人类思考问题是按照某一种过程的..这一个过程的结束也许可以发生一个质的改变..因为时间是这个空间不可缺少一个维度.所以他决定了事物都是按照一个过程发展进行的..所以从这个角度来说..面向对象于面向过程并不冲突的..其实面向对象是一种思维方式.而不是一种处理事务的过程..

为什么会出现面向对象呢??这个也得从人类的认知说起..因为人们逐渐发现了..这个世界是可以总结出来的..人们为了更好的判断事物.总是自觉或者不自觉的在给事物进行归类..这种归类的过程就是人们对面向对象的思维的一种认识.一种学习.一种进步..

人们会把水果放在一起储藏..再把肉类放在一起储藏..水果中又把容易变质的放在一起..这些不自觉的行为当被上升为理论的时候..这个强大的面相对象的就出现了..

一切皆对象.这句话果真不错..我目前还没有发现这个世界上不是”对象”的一种事物..你能找到吗??你理解这句话吗??噢对..貌似”时间”不是对象..那”时间”又是什么呢??这个需要跟霍金商量下吧..

read more

27
6

addslashes与mysql_real_escape_string的区别..

Author Jessica     Category PHP     Tags , ,

对于我这样的菜鸟来说..一直很觉得奇怪..

就是PHP貌似很多功能一样的函数.但是函数名不一样..

就比如addslashes和mysql_real_escape_string..

都是为了使数据安全的插入到数据库中而进行过滤..

那么这两个函数到底是有什么区别呢??

我们今天来简单的看下..

首先.我们还是从PHP手册入手..

手册上addslashes转义的字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。

mysql_real_escape_string转义的字符并没有被提到.只是说了一句

注意: mysql_real_escape_string() 并不转义 %_

为什么PHP手册没有说呢?因为其实这是个MySql的C的API.所以我们需要查下MySql手册..上面是这么说的.

编码的字符为NUL (ASCII 0)、‘\n’、‘\r’、‘\’、‘’、‘’、以及Control-Z(请参见9.1节,“文字值”)。(严格地讲,MySQL仅需要反斜杠和引号字符,用于引用转义查询中的字符串。该函数能引用其他字符,从而使得它们在日志文件中具有更好的可读性)。

不得不说一句.MySql手册上面的话总是令人费解的..

我们为了更深层次的探究这两个函数的不同..还是去看一看PHP的源码吧..

read more

25
7

两种代码高亮引擎的比较 – GeSHi和SyntaxHighlighter

Author Jessica     Category PHP     Tags , ,

我一直苦于寻找一个优秀的代码高亮的引擎.

在我寻找了N个以后..发现了一个令我兴奋的 – SyntaxHighlighter

它的主页是:http://alexgorbatchev.com/

今年刚更新了2.0版..其实早在1.X的时候它就名声在外了..

它是基于JS的..在2.0版本中还加入了兼容所有浏览器的复制代码功能..

别小看这一功能..能做好这一个功能已经非常不简单了!

但是它有个软肋..也是我不想使用它的原因..

它需要页面去加载将近20K的JS和CSS文件..

虽说网速快这点不算什么..但是老觉得不爽:(

然后我就发现了GeSHi..

主页地址:http://qbnz.com/highlighter/

他是一个PHP类..所以高亮完直接输出HTML代码.

可以直接保存到数据库中.下次取出来的时候只要加载CSS就OK了..

read more

23
14

我也来说下登录后跳转的问题..

Author Jessica     Category PHP     Tags ,

这个功能对于大部分网站都存在..也都实现了..

这个功能是十分人性化的..所以对于一个专业性的网站是十分需要的..

如果用户在浏览你网站的过程中突然想登录了..这时候他已经看过N个页面..已经到了一个N个子级的页面了..

如果他登录后不能回到这个页面..用户是非常伤心..非常受委屈的..

这一个小小的功能就可以体现出一个网站是否做的够人性化..

不过在现在看来..大部分网站都有这个功能了..

一般来说..都是通过url参数来实现的..

我来举个例子.

我在C页面.登录..登录处理的页面是login.php..

这时候我要把参数穿过去 比如 login.php?url=c.php

注意.这里最好是urlencode下..

然后在login.php处理的时候.如果存在$_GET['url']登录后就转到那个页面..

但是..GET毕竟是不安全的..如果用户不小心在地址栏碰了一下.显然就无法跳转了..

read more

20
7

仿Discuz!上传功能(改进版)

Author Jessica     Category JavaScript     Tags ,

上次发了一个discuz上传的例子..看到很多人需要..就有写了一个改进版..

这个版本增加了上传前的预览功能.

不过很遗憾..在IE8和FF中.为了保证安全.是获取不到type为file的input的value的绝对路径的..只能获取到文件名..这个没有办法解决..所以只能取消预览功能.

所以这个功能只能在IE6和IE7下实现..

演示:http://www.skiyo.cn/demo/discuzupload/

代码就不贴了…直接给出下载地址吧.

read more

20
3

变量的内存运用情况..

Author Jessica     Category PHP     Tags , ,

对变量进行null赋值有用吗??我们今天来测试下..

  1. <?php  
  2. $a = memory_get_usage();  
  3.  
  4. $str = 'aaa';  
  5. $str = 'abc';  
  6.  
  7. $b = memory_get_usage();  
  8. echo $b-$a

这个例子在我这里输出的是176..也就是使用了176个字节..

下面我们给变量赋值null后再进行第二次赋值再看看

  1. <?php  
  2. $a = memory_get_usage();  
  3.  
  4. $str = 'aaa';  
  5. $str = null;  //注意这里..  
  6. $str = 'abc';  
  7.  
  8. $b = memory_get_usage();  
  9. echo $b-$a

得出的结果是160字节..这说明了什么??

给变量进行null赋值后..内存也被释放了..而你如果没有进行这一步骤..

aaa这个字符串还会存在在内存中的..

但是另外一个奇怪的现象..

read more

17
3

自己的JavaScript简单类库 – Skiyo.js

Author Jessica     Category JavaScript     Tags ,

自己做项目的时候用到的.本来想用jQuery的.但是项目是别人做好的.我是拿来改的..我就附加个小功能.还得加载30K的jQuery有点不值得.

所以自己就写了个简单的JavaScript类库.

普通的DOM+COOKIE+AJAX操作..

具体来看代码

  1. <div id="abc">abc</div>  
  2. <p>  
  3.   <input name="def" value="def" />  
  4. </p>  
  5. <script type="text/javascript">  
  6. alert($('#abc').innerHTML);  //byId   
  7. //alert($('abc').innerHTML);  //和上面一样.如果没有特殊前缀默认是byId  
  8. alert($('@def')[0].value);   //byName  
  9. alert($('!div')[0].innerHTML);   //byTagName  
  10. alert(Skiyo.isIE);  
  11. Skiyo.cookie('testCookie''This is a test!');  
  12. //Skiyo.cookie('testCookie', 'This is a test!', {  expires: 10 });  //cookie路径与cookie期限(天)  
  13. //var date = new Date();  
  14. //date.setTime(date.getTime() + (3 * 24 * 60 * 60 * 1000));  
  15. //Skiyo.cookie('testCookie', 'This is a test!', { path: '/', expires: date });  //cookie路径与cookie期限(date, 3天)  
  16. alert(Skiyo.cookie('testCookie'));  //读取cookie  
  17. //ajax  
  18. //test.php <?php echo $_GET['test']; ?>  
  19. Skiyo.ajax( 'test.php''test=abc''GET''Text'function(text) {alert(text)} );  
  20. </script> 

操作很简单吧….凑合着用了..

演示(附下载) : http://www.skiyo.cn/demo/skiyojs/

16
3

利用Tokenizer Functions实现代码高亮!

Author Jessica     Category PHP     Tags , ,

上次我用Tokenizer Functions举了个例子..作用是去除代码的注释..

想想Tokenizer Functions还能有什么用处呢??它的作用就是分析语法..

所以我们可以利用他轻松的实现代码高亮:)而省去了页面加载JS..因为你传过来的代码直接加上了HTML标签.所以存到数据库中就可以了:)

我这次就是表达个意思..没有把代码写的完全..我模仿的是Zend Studio 5.5 的代码高亮..

大家先看下截图吧..

怎么样?有点意思吧..注意看这是Debug窗口..而不是代码编辑窗口噢..:)

我博客带的高亮方式有问题.发布的源码复制下来会没有回车.所以大家要学习代码请下载.最下面就有..

PS:不要跟我说什么highlight_string就可以办到..我们一是为了学习知识..而且你可以写一个类.并且是支持皮肤的.也就是说支持不同的代码高亮方式..

这是highlight_string远远所不能比的..

read more

分类目录

最近文章

最近评论

文章索引模板

标签

.net AJAX button Comet CSS Discuz! DIV+CSS Flash Form Google HTML编辑器 IE8 Java JavaScript jQuery JSP md5 MySQLReback Oracle PHP php-fpm PNG Punny SkiyoTabs tab TagCloud Vista Web2.0 Windows7 上传 加密 变量 图标 本站原创 模板 模板引擎 源码 登录 短网址 石家庄 算法 编译 面向对象 魔术方法

链接表