谈面向对象的思维方式..
这个标题有点大..我能说多少说多少..因为我也是个菜鸟..如果其中有些理解跟您有出入..还望指教..有争议才可以进步:)..
新手为什么总抱怨面向对象编程(以下简称OOP)难学??
新手为什么总无法深刻的理解OOP的思想??
能写出一个合格的类就代表你理解了OOP的思想了吗??
什么样才算真正的理解了OOP??
OOP难在什么地方??为什么我总是学不会??
相信很多人和我一样..在学习OOP的时候总会有上面那么多的问题..不过不要紧.我们今天就来探讨一下这些问题..
我个人认为..很多人都认为会写一个类就理解了OOP的思想了…这个思路是错误的..这就是为什么很多人虽然会写类了..但是写出来的类很“畸形”..究其根源..还是因为没有深刻的理解OOP的思维.
我建议大家..努力学习OOP基础..先不要去尝试写一个值得骄傲的类..你扪心自问..你虽然可以写出一个优秀的类.但是你理解了OOP了吗??
现在对于广大的PHPer来说..一个非常困难就在眼前..不光是我们这些菜鸟..就连一些著名的开源程序也一样..对于OOP非常不明确..
根据我的理解.我觉得大部分人写出”畸形”的类还是对OOP没有理解的非常深刻..那么好..今天我们大家就来探讨一些这个问题…
我们首先得知道.这个世界为什么会有OOP.为什么会出现OOP..一个事物从出现到发展.到今天的大红大紫..肯定有它无可替代的优越性..这种优越性经过这么多年的发展…很有必要普及到每个程序员..因为作为一名程序员.一定要有这样的思想..你的程序不是写给你自己的..你的程序是写给他人甚至后人看的..一段优美的代码也许一个程序员一生只能写出一段.但是这段代码也许会对以后发生惊人的意义..所以建议大家以后写代码.不要为了赶时间.不要为了着急实现某项功能..希望大家仔细锤炼代码..仔细思考..这对于你本人也是一种提高..
其次我们得理解为什么程序最初是面向过程的..也就是为什么会先有C而不是先有C++..好像这是个人类学的问题.或者说是一个哲学问题..人类思考问题是按照某一种过程的..这一个过程的结束也许可以发生一个质的改变..因为时间是这个空间不可缺少一个维度.所以他决定了事物都是按照一个过程发展进行的..所以从这个角度来说..面向对象于面向过程并不冲突的..其实面向对象是一种思维方式.而不是一种处理事务的过程..
为什么会出现面向对象呢??这个也得从人类的认知说起..因为人们逐渐发现了..这个世界是可以总结出来的..人们为了更好的判断事物.总是自觉或者不自觉的在给事物进行归类..这种归类的过程就是人们对面向对象的思维的一种认识.一种学习.一种进步..
人们会把水果放在一起储藏..再把肉类放在一起储藏..水果中又把容易变质的放在一起..这些不自觉的行为当被上升为理论的时候..这个强大的面相对象的就出现了..
一切皆对象.这句话果真不错..我目前还没有发现这个世界上不是”对象”的一种事物..你能找到吗??你理解这句话吗??噢对..貌似”时间”不是对象..那”时间”又是什么呢??这个需要跟霍金商量下吧..
addslashes与mysql_real_escape_string的区别..
对于我这样的菜鸟来说..一直很觉得奇怪..
就是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的源码吧..
两种代码高亮引擎的比较 – GeSHi和SyntaxHighlighter
我一直苦于寻找一个优秀的代码高亮的引擎.
在我寻找了N个以后..发现了一个令我兴奋的 – SyntaxHighlighter
它的主页是:http://alexgorbatchev.com/
今年刚更新了2.0版..其实早在1.X的时候它就名声在外了..
它是基于JS的..在2.0版本中还加入了兼容所有浏览器的复制代码功能..
别小看这一功能..能做好这一个功能已经非常不简单了!
但是它有个软肋..也是我不想使用它的原因..
它需要页面去加载将近20K的JS和CSS文件..
虽说网速快这点不算什么..但是老觉得不爽:(
然后我就发现了GeSHi..
主页地址:http://qbnz.com/highlighter/
他是一个PHP类..所以高亮完直接输出HTML代码.
可以直接保存到数据库中.下次取出来的时候只要加载CSS就OK了..
我也来说下登录后跳转的问题..
这个功能对于大部分网站都存在..也都实现了..
这个功能是十分人性化的..所以对于一个专业性的网站是十分需要的..
如果用户在浏览你网站的过程中突然想登录了..这时候他已经看过N个页面..已经到了一个N个子级的页面了..
如果他登录后不能回到这个页面..用户是非常伤心..非常受委屈的..
这一个小小的功能就可以体现出一个网站是否做的够人性化..
不过在现在看来..大部分网站都有这个功能了..
一般来说..都是通过url参数来实现的..
我来举个例子.
我在C页面.登录..登录处理的页面是login.php..
这时候我要把参数穿过去 比如 login.php?url=c.php
注意.这里最好是urlencode下..
然后在login.php处理的时候.如果存在$_GET['url']登录后就转到那个页面..
但是..GET毕竟是不安全的..如果用户不小心在地址栏碰了一下.显然就无法跳转了..
仿Discuz!上传功能(改进版)
上次发了一个discuz上传的例子..看到很多人需要..就有写了一个改进版..
这个版本增加了上传前的预览功能.
不过很遗憾..在IE8和FF中.为了保证安全.是获取不到type为file的input的value的绝对路径的..只能获取到文件名..这个没有办法解决..所以只能取消预览功能.
所以这个功能只能在IE6和IE7下实现..
演示:http://www.skiyo.cn/demo/discuzupload/
代码就不贴了…直接给出下载地址吧.
变量的内存运用情况..
对变量进行null赋值有用吗??我们今天来测试下..
- <?php
- $a = memory_get_usage();
- $str = 'aaa';
- $str = 'abc';
- $b = memory_get_usage();
- echo $b-$a;
这个例子在我这里输出的是176..也就是使用了176个字节..
下面我们给变量赋值null后再进行第二次赋值再看看
- <?php
- $a = memory_get_usage();
- $str = 'aaa';
- $str = null; //注意这里..
- $str = 'abc';
- $b = memory_get_usage();
- echo $b-$a;
得出的结果是160字节..这说明了什么??
给变量进行null赋值后..内存也被释放了..而你如果没有进行这一步骤..
aaa这个字符串还会存在在内存中的..
但是另外一个奇怪的现象..
自己的JavaScript简单类库 – Skiyo.js
自己做项目的时候用到的.本来想用jQuery的.但是项目是别人做好的.我是拿来改的..我就附加个小功能.还得加载30K的jQuery有点不值得.
所以自己就写了个简单的JavaScript类库.
普通的DOM+COOKIE+AJAX操作..
具体来看代码
- <div id="abc">abc</div>
- <p>
- <input name="def" value="def" />
- </p>
- <script type="text/javascript">
- alert($('#abc').innerHTML); //byId
- //alert($('abc').innerHTML); //和上面一样.如果没有特殊前缀默认是byId
- alert($('@def')[0].value); //byName
- alert($('!div')[0].innerHTML); //byTagName
- alert(Skiyo.isIE);
- Skiyo.cookie('testCookie', 'This is a test!');
- //Skiyo.cookie('testCookie', 'This is a test!', { expires: 10 }); //cookie路径与cookie期限(天)
- //var date = new Date();
- //date.setTime(date.getTime() + (3 * 24 * 60 * 60 * 1000));
- //Skiyo.cookie('testCookie', 'This is a test!', { path: '/', expires: date }); //cookie路径与cookie期限(date, 3天)
- alert(Skiyo.cookie('testCookie')); //读取cookie
- //ajax
- //test.php <?php echo $_GET['test']; ?>
- Skiyo.ajax( 'test.php', 'test=abc', 'GET', 'Text', function(text) {alert(text)} );
- </script>
操作很简单吧….凑合着用了..
演示(附下载) : http://www.skiyo.cn/demo/skiyojs/
利用Tokenizer Functions实现代码高亮!
上次我用Tokenizer Functions举了个例子..作用是去除代码的注释..
想想Tokenizer Functions还能有什么用处呢??它的作用就是分析语法..
所以我们可以利用他轻松的实现代码高亮:)而省去了页面加载JS..因为你传过来的代码直接加上了HTML标签.所以存到数据库中就可以了:)
我这次就是表达个意思..没有把代码写的完全..我模仿的是Zend Studio 5.5 的代码高亮..
大家先看下截图吧..

怎么样?有点意思吧..注意看这是Debug窗口..而不是代码编辑窗口噢..:)
我博客带的高亮方式有问题.发布的源码复制下来会没有回车.所以大家要学习代码请下载.最下面就有..
PS:不要跟我说什么highlight_string就可以办到..我们一是为了学习知识..而且你可以写一个类.并且是支持皮肤的.也就是说支持不同的代码高亮方式..
这是highlight_string远远所不能比的..
分类目录
- ActionScript (2)
- CSS (25)
- Java (3)
- JavaScript (41)
- PHP (105)
- 心情杂谈 (34)
- 收集整理 (77)
- 本站原创 (55)
最近文章
- 将google ssl设置为IE8的默认搜索引擎..
- 我们来做一个会呼吸的菜单吧!!
- 在编译php-fpm0.6的时候需要注意的一些问题
- 使用PHP将大文件导入到数据库中..
- 关于用PHP调用WebService中参数为complexType的问题
- 神奇的两次按位非运算符
- 百路推免费短网址服务..首创”收藏夹获取短网址”..
- 哥学社正式上线..
- jQuery中getJSON跨域原理详解
- Web辅助工具条(原名:河蟹工具条CrabBar)0.1发布
- 腾讯微博PC端发图教程
- goo.gl URL Shortener for WordPress
- PHP上传进度条深度解析
- Google短网址(goo.gl)服务类
- TinyURL.class.php
最近评论
- 匿名 在 一个PHP+AJAX留言板的完整例子.非常简单! 上的评论
- pfeng 在 将google ssl设置为IE8的默认搜索引擎.. 上的评论
- pfeng 在 将google ssl设置为IE8的默认搜索引擎.. 上的评论
- 北戴河旅游住宿 在 PHPer的历练 上的评论
- konakona 在 将google ssl设置为IE8的默认搜索引擎.. 上的评论
- 宁静致远 在 PHPer的历练 上的评论
- Corsair_Boss 在 强人作品 – jQuery1.2.6源码分析 上的评论
- fanglor 在 PHPer的历练 上的评论
- fanglor 在 百路推免费短网址服务..首创”收藏夹获取短网址”.. 上的评论
- 匿名 在 Web辅助工具条(原名:河蟹工具条CrabBar)0.1发布 上的评论
文章索引模板
- 2010年七月 (3)
- 2010年六月 (4)
- 2010年五月 (2)
- 2010年四月 (9)
- 2010年三月 (12)
- 2010年二月 (1)
- 2010年一月 (3)
- 2009年十二月 (2)
- 2009年十一月 (3)
- 2009年十月 (3)
- 2009年九月 (5)
- 2009年八月 (4)
- 2009年七月 (6)
- 2009年六月 (8)
- 2009年五月 (8)
- 2009年四月 (16)
- 2009年三月 (19)
- 2009年二月 (22)
- 2009年一月 (20)
- 2008年十二月 (38)
- 2008年十一月 (22)
- 2008年十月 (7)
- 2008年九月 (3)
- 2008年八月 (24)

Jessica


