分类 技术 下的文章

PHP的引用返回

看代码的时候忽然发现有这么个函数定义

class A {
    private $someAttribute = 10;
        function &oddFunc() {
        return $this->someAttribute;
    }
}

oddFunc前面有个奇怪的&,查了一会知道这个是“引用返回”,见手册。

oddFunction会返回变量的引用,对someAttribute的修改会影响到这个暴露在外的引用。

手册说:不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!

查了一会也没找到实际用途,求指点。

工具和技艺

木匠做木件,一般过程如下

  1. 想好做什么
  2. 准备好工具,材料
  3. 花时间和力气做出来

好的工具不仅省力气,而且做出来的东西质量很高。

比如想要让木料表面平整,光滑,以前的人会使用磨石,可以磨的很细,很均匀。但磨石很重,太费力气。后来有了推刨,推刨只能大致平整,没法做的很细。再到后来有砂纸和电刨,又快又省力。

有些工具虽然省力,却不能帮助木匠达到目的。比如气钉枪,装好钉子,对准木头按几下就完事,质量却常常差强人意。有些地方太小,气钉枪伸不进去,还是最简单的锤子方便。

想知道什么工具好用,看书上网都可以,找人聊天也很重要,不仅能知道别人用什么工具,还能知道为什么用,优缺点是什么,对自己的情况,别人也能给出建议。

没有工具的时候,先把事情做完,再想办法省力。比如锯子出来之前,切断木料,用斧子砍也可以,劈断之后,慢慢用斧子修。这样做既费工,也费料。鲁班大师因为手被草割破,想到做锯子,造福天下的木匠。

有了工具,事情还是需要人做的。相同的工具,相同的木料,不同的人做同一种木件,花的时间不尽相同,品质也会不同,因为人的技艺不一样。

  • 结构是木件的基础,除了决定做出来的东西能不能用,还决定了需求稍微变一点的情况下,木件要做多大的改变。比如,凳子可以做,需要的时候还能放盆花,垫脚;折叠桌放轻一点的东西还行,站上去就不稳,当然,它有占地小的优点。结构不能过于复杂,否则太精妙,或者一物有太多用处,让人弄不懂,而且容易坏。
  • 接口的做法,决定着实现的难易度,组件做出来之后拼装的难度,还有成品的品质。好的木匠,做出来的木件没用后,拆出来的组件稍微改改还能派别的用处。
  • 细节考究的木件,说明木匠有认真考虑过用户如何使用自己的木件,不会划手的钝角,没有毛刺,防滑垫,均匀的油漆。细节说明了态度,好的态度很难让人忘记。

技艺需要在实践中磨练,也就是边做边练。只靠体力,做一千个小板凳也没用。要知道自己哪里做得好,哪里做的不好,为什么好,为什么不好,如何更好。和别人交流,看看别人是怎么做的,互相切磋,也是重要的进步方式。

不要把木工看成纯体力活,经常总结,多交流,不断进步。做更多有意思的木件。

让WP插件counterize显示IP

Counterize是一款很棒的Wordpress统计工具。

不过不能显示访问者的IP,即使在mysql里查询(Counterize那张表),也只有md5过的IP地址。

花了1个小时研究一下,做一点点小小的改动,就能让它显示IP。

准备工作:解压下载到的zip包

步骤:

  1. 为了让真实IP有地方存,修改Counterize表,添加"realIP"字段,varchar(30),默认为NULL;
  2. 存真实IP:修改counterize.php的counterize_add函数,函数结尾的地方有INSERT数据库的操作,在这里稍作改动:
    1. INSERT里加上realIP,记得用逗号和其它字段隔开
    2. VALUES里加上真实IP,真实IP的变量是$remoteaddr,其它的会写sql的人都知道怎么改
  3. 在Counterize的显示页面显示出来,我没有单独做,把IP塞在最下方Latest entries的UserAgent里,做法:
    1. 修改counterize.php的counterize_getentries函数,在SELECT后面加上"m.realIP AS realIP";
    2. 修改counterize.php的counterize_show_history函数,在显示useragent的地方:
      1. 原来是:<small><?php echo counterize_browser_string($entry->useragent , true, '<br>'); ?></small>
      2. 在下面加上:<?php if ($entry->realIP) { ?><div><a target="_blank" href="http://ip138.com/ips138.asp?ip=<?= $entry->realIP ?>&action=2"><?= $entry->realIP ?></a></div><?php } ?>

经过上面的修改,新来的访客就可以看到IP地址了。