145 views | 2011/08/26
PHP是支持引用的,但是关于一个变量什么时候是引用,什么时候是值,我脑子里总是迷迷糊糊的,所以,想用引用的时候,就会不自觉地在所有的地方加上&符号,真的很累赘。为了缓解这个问题,我特意写了下面这个代码片段来增进自己的理解。起初,我对这个东西的理解是,对于对象来说,PHP5就是按照引用传递的。但是我现在想,可能事情不是这么一回事情。下面的代码片段中,$obj其实是A的对象的一个引用,可以理解成一个指针,函数参数$o,其实还是对$obj的拷贝,只是拷贝的是引用本身,也即,$o其实是$obj的拷贝,只是由于其拷贝了$obj,所以,$o也指向A的对象。两个指针指向一个地方,这也是为什么函数changeObj可以改变A的对象的原因。我想,这样大概从技术来说,会更加合理一点。
- <?php
- class A {
- public $a=1;
- public $b=1;
- }
- $obj = new A;
- var_dump($obj);
-
- function changeObj($o){
- $o->a = 3;
- $o->b = 5;
- }
- changeObj($obj);
- var_dump($obj);
执行结果如下:
- object(A)#1 (2) {
- ["a"]=>
- int(1)
- ["b"]=>
- int(1)
- }
- object(A)#1 (2) {
- ["a"]=>
- int(3)
- ["b"]=>
- int(5)
- }
然后再看一个普通变量的引用传递的例子,这个例子里面使用的是原生的整型变量,然后函数changeInt的函数声明里,也用一般方法声明参数,普通的调用,我们发现函数不能改变$x和$y的值,这符合我们的预期,但是第二个形式的调用,就是传参数时候,带上引用标志&,结果我们发现,$x和$y的值也改变了,这是为什么呢,跟上面的例子是一个原因,函数的形式参数a和b其实是$x和$y的引用的拷贝,所以a和b也指向x和y,所以,a和b可以改变x和y的值。再看最下面的一种形式,这种是我认为的真正的按照引用传递参数。非常的绕乎对吧?我也觉得如此,确实太过灵活了。确实不利于学习和理解,代码也不容易维护,如果真的想用引用传递参数,推荐用最底下一种方式,明确告诉调用的人,这里其实是引用,千万别用changeInt(&$x, &$y);这种形式,这个代码散步在各处,将极难定位bug。
- <?php
- $x = 1;
- $y = 2;
-
- function changeInt($a, $b){
- $a = 3;
- $b = 4;
- }
- changeInt($x,$y);
- var_dump($x, $y); //$x = 1, $y = 2
- changeInt(&$x, &$y);
- var_dump($x, $y); //$x = 3, $y = 4
-
- function changeIntByRef(&$a, &$b) {
- $a = 5;
- $b = 6;
- }
- changeIntByRef($x, $y);
-
- var_dump($x, $y); //$x = 5, $y = 6
Posted in PHP, 工作相关, 心得体会 | Tagged basic, PHP, usage |
2459 views | 2011/07/10
ExtJS是我听说了很久的一个js框架了,但是从来就没有用过,读研期间寝室里有个小哥在用,不过那时候醉心于WordPress开发,也懒得理会了。现在公司里,有个上线系统用到了这个框架中的一个TreePanel组件,整个界面上,就正中间扔了一个tree panel,而且不知道什么原因,CSS还有bug,把按钮都搞破了,弄得丑陋不堪,我于是自告奋勇,仔细调试,终于修复了那个显示上的bug,从此算是初次结识了ExtJS。它真正吸引我的原因是,它能够把富客户端应用的开发,从美工和基础交互中解放出来,只需要专注于业务逻辑开发即可,从而让后台工程师也能够有能力快速开发外观专业的网站应用系统。我觉得这真是功德无量的一个事情。(如果我直觉没错,Flex框架也是这一类东西,这也是我对其有兴趣的原因,当然还没有时间尝试) Continue reading "ExtJS 4 的MVC"
Posted in ExtJS, 心得体会 | Tagged analytics, development, extjs, MVC, yii |
268 views | 2011/06/14
vim应该是现在世界上最流行的编辑器,没有之一。就算你千般百般地不喜欢它,掌握它也成了一件必须的事情了。因为日后你如果做程序员,在非Win系列的服务器上搞开发,vim绝对是无法避免的。你日常能接触到的server,emacs可能没装,但是vi不可能没装,就这样。
特意开辟这个文章,用于收藏一些工作中常用的操作,主要有这么几个原则:
- 非常有用
- 不常用
- 每次用都想不起来应该怎么用
不知道大家是不是经常跟我一样有这种感受呢,我会把我遇到的这类操作,都详细写在这里。
将配置文件中的指定列前面加上注释符号
- #fastcgi.conf
- fastcgi_param GATEWAY_INTERFACE CGI/1.1;
- fastcgi_param SERVER_SOFTWARE nginx;
- fastcgi_param QUERY_STRING $query_string;
- fastcgi_param REQUEST_METHOD $request_method;
- fastcgi_param CONTENT_TYPE $content_type;
- fastcgi_param CONTENT_LENGTH $content_length;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_param SCRIPT_NAME $fastcgi_script_name;
- fastcgi_param REQUEST_URI $request_uri;
- fastcgi_param DOCUMENT_URI $document_uri;
- fastcgi_param DOCUMENT_ROOT $document_root;
如上代码是一个很常见的配置文件,我现在要给第2-12行前面都加上一个#号,注释掉他们,在EmEditor里面这个事情无敌简单的,但是到了vi里面,你是不是总也想不起来应该怎么弄?
解释一下,【2,12】在vi中叫range,看帮助的时候,如果看到range,这就是一种写法,表明第2行到12行。
还有一种写法:
将光标移动到第二行,然后执行上面的命令,后面的【11】代表,执行这个命令,重复11次。这里一直没解释里面那个至关重要的乱码串,那个就是替换的命令了。下次再说。
删除的时候使用f和t
删除是vim里面非常常用的功能,一个一个字幕删除,用x,可以代替del用。整行删除,dd,应该都会了。删除一个单词,用dw。这些都是简单提一下,我主要想两个很好用的功能,就是f和t。
f的本意是行查找,fa,就是从光标当前位置开始,在本行中,找到第一个字母a,和d结合起来以后,就非常方便了,比如:
- <?php
- function test_php($a,$b,$c) {
- return true;
- }
在这个代码里,你想删掉第一个参数,可以把光标放在(后面的第一个$上,然后按"df,",就可以把$a连同后面的逗号都删掉,非常方便。当然了,你可以发挥一下,"d2f,"这个按键序列就是把$a和$b都删掉了,但是呢,用数字这种东西,在实际操作中,我感觉大脑经常反应不过来,需要思考,不实用。
在来说一下t,t这个东西,跟f非常像,区别就是t把找光标放到找到的那个字符前面一个位子,比如上面那个例子,我把光标放在第一个$上,然后按下"dt)"这个序列,可以把函数的3个参数都删掉,但是却不会删掉括号,非常舒服,在括号里删东西,我经常用这个功能。
Posted in Linux, 工作相关, 心得体会 | Tagged tips, tricks, usage, vim |
349 views | 2011/06/13
最常见的SVN客户端其实是TortoiseSVN,我一直叫它作乌龟SVN。上班以后,我在办公室使用SVN连接非办公网络的服务器,发现无法连接,原来,是因为大多数办公网络都设置了防火墙,要连接外网的服务器,必须配置代理。如果使用的是TortoiseSVN,那么“右键”-》“Settings”-》“Networking”,就可以找到设置代理的地方:

我自己经常使用的是另一款SVN客户端,不知道国内有多少用户,总之我也提一下吧,下载的网站是这里:http://www.collab.net/,这家公司是SVN的幕后支持公司,他们开发基于命令行的各种操作系统的客户端,基于命令行,所以就非常的轻巧,最关键是装好以后,可以和NetBeans无缝集成,也不会弄一堆花花绿绿的图标在资源管理器里面,让你看了红色惊叹号凭空焦虑。
给这个命令行客户端设置代理有点纠结,看不明白的童鞋,自动忽略好了。首先打开CMD,然后键入命令echo %APPDATA%,得到的结果,就是你的配置所在的根目录,进入那个目录,然后进入Subversion子目录,你会看到两个配置文件,一个叫config,一个叫servers,用写字板编辑那个servers的配置文件:
- [global]
- # http-proxy-exceptions = *.exception.com, www.internal-site.org
- http-proxy-host = defaultproxy.whatever.com
- http-proxy-port = 7000
- http-proxy-username = defaultusername
- http-proxy-password = defaultpassword
配置好后,就可以实现给SVN客户端挂上了代理,如果只想给特定的域挂代理,就使用另一个section来配置代理:
- [groups]
- group1 = *.googlecode.com
- # othergroup = repository.blarggitywhoomph.com
- # thirdgroup = *.example.com
-
- ### Information for the first group:
- [group1]
- http-proxy-host = proxy.myoffice.com
- http-proxy-port = 8080
- # http-proxy-username = blah
- # http-proxy-password = doubleblah
- # http-timeout = 60
如上只是我的配置的一个节选,是我给googlecode这个域配置了一个代理。
Posted in 小窍门, 工作相关, 心得体会 | Tagged proxy, subversion, svn |
173 views | 2011/05/18
Yii框架自带验证器这个包,提供了一组常见各类属性的验证器。如果使用Gii代码生成工具创建model,会根据数据库字段的属性默认生成一些验证器的配置。在配置验证器的时候,很多验证器都有以后属性叫做allowEmpty,这个属性的真正逻辑却不是看上去的那个意思。 Continue reading "Yii框架中验证器的allowEmpty属性"
Posted in Yii, 工作相关 | Tagged usage, yii |
96 views | 2011/05/14
本站创立始于2008年三月,估计最老的一批读者现在几乎已经都不再来了,一开始,我的这个小站就专注于WordPress的周边一些话题,包括主题定制,插件开发,DIY,hacks,插件汉化等等。最早,域名不是现在这个,是charlestang.cn,那是一个在国内注册的域名(你们懂的),后来,随着博客的成长,我发现我的博客主要内容都已经偏向了WordPress,其他技术内容已经非常少了,那个时候,我做出了一次结构的重大调整,就是将跟技术无关的内容都移出了本博客,专门开辟了个人生活内容博客,而这个博客则专注于WordPress相关的内容。
在使用原来的域名的时候,曾经接入过一次Google分析,但是感觉拖慢了网站的速度,就弃用了,因为觉得自己的博客反正无法盈利,统计是否强大,完全无所谓,所以那个时候,就使用了站长统计,一直用到今天,现在仍然挂着。随着我毕业走上工作岗位,终于进入了互联网行业,最近正好要研究一些网站统计的相关内容,所以又想起了Google分析,这次,我算是正式给小站挂上了Google分析了。特此写一篇文章,纪念这个时间,希望未来1年,3年,5年的时候,还能从这篇文章的内容,回想起事情的始末。
Posted in WordPress | Tagged analytics, google, statistic |
Most Commented Posts