• include的返回值

    【神仙】 2007-08-30 21:40

    php有一个include,顾名思义,就是用来包含文件的。相应的还有require,以及两个带once的。不知道大家有没有注意过include的返回值。通常情况下,包含成功返回1,包含失败返回false。但是,如果被包含文件中用return返回,那么这个值就是return的值。比如:
    <?php
    //1.php
    $ret = include '2.php';
    echo "$ret\n"; //输出wakaka
    ?>

    <?php
    //2.php
    return 'wakaka';
    ?>

    从1.php的输出就可以看到,这里include的返回值就是2.php中return的那个'wakaka'。

    这个特性有什么用呢? 我是利用它来方便地使用php文件来做配置。比如,一个配置文件可以这么写:

    <?php
    //config.php
    return array(
        'db'=>array(
                'host' => 'localhost',
                'user' => 'root',
                'password' => 'wakaka',
                'name' => 'test',
                'encoding' => 'utf8'
        )
    );

    载入的时候,只需要$conf = include 'config.php';就可以了。

     

  • 慢下来也是不容易的

    【神仙】 2007-08-25 21:08

      世界如此美妙,但我却很少真正停下来,慢慢地去欣赏。总是急匆匆地来,又急匆匆地路过。

      坐在学校的大草坪上,看着天空慢慢变暗,在感觉到时间慢慢流逝的时候,为什么总会感到有一些不安呢?焦躁啊焦躁,这样不好,离传说中的新绅士还很遥远哦。

  • DIY了一个反光板

    【神仙】 2007-08-24 00:00

    DC的小闪光灯有时候总是很不爽的,但我这个DC没有热靴,不能外接闪光灯。不过我总还会想办法。上回实验用镜子把光反射到天花板上,让光更自然柔和。但是镜子总是比较麻烦的,所以想做一个方便点的反光板。

    于是拿出硬纸板、铝箔 ,还有剪刀胶水美工刀,自己做了一个反光板。试了一下,效果还算不错。未来还有扩展空间。

    装上以后拍了一张照片


    原图裁切

  • PHP实现的事件

    【神仙】 2007-08-20 22:40
      内置了事件机制的语言不多,php也没有提供这样的功能。事件(Event)说简单了就是一个Observer模式,实现起来很容易。但是有所不同的是,事件的监听者谁都可以加,但是只能由直接包含它的对象触发。这就有一点点难度了。php有一个debug_backtrace函数,可以得到当前的调用栈,由此可以找到判断调用事件触发函数的对象是不是直接包含它的对象的办法。

    <?php

    /**
    * 事件
    *
    * @author xiezhenye <xiezhenye@gmail.com>
    * @since 2007-7-20
    */
    class Event {
        private $callbacks = array();
        private $holder;

        function __construct() {
            $bt = debug_backtrace();
            if (count($bt) < 2) {
                $this->holder = null;
                return;
            }
            $this->holder = &$bt[1]['object'];
        }
        
        function attach() {
            $args = func_get_args();
            switch (count($args)) {
                case 1:
                    if (is_callable($args[0])) {
                        $this->callbacks[]= $args[0];
                        return;
                    }
                    break;
                case 2:
                    if (is_object($args[0]) && is_string($args[1])) {
                        $this->callbacks[]= array(&$args[0], $args[1]);
                    }
                    return;
                default:
                    return;
            }
        }

        function notify() {
            $bt = debug_backtrace();
            if ($this->holder &&
                    ((count($bt) >= 2 && $bt[count($bt) - 1]['object'] !== $this->holder)
                    || (count($bt) < 2))) {
                throw(new Exception('Notify can only be called in holder'));    
            }
            foreach ($this->callbacks as $callback) {
                $args = func_get_args();
                call_user_func_array($callback, $args);
            }
        }
    }
  • 到田子坊八号桥转了圈

    【神仙】 2007-08-18 22:46

      今天到田子坊八号桥转了圈。本来是没打算去田子坊的。在建国中路上走,看到一个弄堂里有栋房子很有意思,就走了进去。结果走着走着,就看到好多老外,还有好多挂着中英文对照牌子的店。才发现原来转到田子坊去了。

      这田子坊里的老外那是真叫多,似乎比新天地的还多。 在田子坊里走,怎么就觉得这不是在中国呢?店都是外国模样的店,人也都是外国人,空气里到处都是香水味。

      记得八号桥离那里不远,既然都转了田子坊了,顺便也去转下八号桥吧。那里也是一个创意园区,似乎也是由工业建筑改造的。虽然弄得很漂亮,不过已经看不出多少原来的痕迹了。

      回来整理了下,发现还是在八号桥拍得更多一点,

       

  • bus的访问统计

    【神仙】 2007-08-13 21:06

      今天bus的访问统计终于上线了。实际上,我自己已经偷偷用了好久。

      看访问统计是很有意思的。比如,从搜索关键字来源和日志访问排名里可以看出,哪些文章最受人或者搜索引擎欢迎。从来源Url和来源域名,可以看出blog的访客都是从哪儿来的。我的blog里,从搜索引擎来的差不多占了2/3。

      在国内的,baidu的用户要比google多不少,许多人的搜索来源里baidu都比google多。但我这里确是google比baidu多。两者的比例大约是3:2。可能因为我这里有技术文章?或者我的文章更合google的胃口?排在后面的搜索引擎是soso(目前用的google)、yahoo、还有那个114(用的微软的)……。DNS劫持还真就劫持到不少用户。MS自己的live搜索似乎还少有人用。

      目前我的blog里访问排名第一的居然是这篇《也说汉服运动》。有一阵搜索关键字来源里都是汉服运动之类的。一下子就把这篇顶到了第一,到现在前10关键字里还有3个是关于汉服运动的。莫非是有几个学校出了这样的考试题目?还有好几篇是技术文章。看来原创的技术文章还是很受欢迎的。

       

  • 船厂路外拍

    【神仙】 2007-08-11 22:23

      今天学校摄影群组织外拍,到船厂路那边拍铁路。但是天气不怎么凑巧,大雨从2点下到6点,只能在那边的KFC等。好在后来雨还是停了。 







    更多照片见我的相册

  • 帅气的猫猫

    【神仙】 2007-08-07 20:37

    下班的时候拍的。还是猫比较配合拍照,知道要看镜头。

  • PHP6的namespace

    【神仙】 2007-08-04 15:45

      php是否需要namespace已经争论了很久。我是很希望php有namespace或类似的东西的。对于发布类库框架,或者构建大的程序来说是很重要的。可以避免类名和函数名冲突,又不用像Pear里那样把类名弄得老长。当初php5的测试版曾经出现过,后来正式发布时又取消了,让我空欢喜一场。7月初,php6的snap里又加入了namespace,希望这次不要再让我空欢喜了。

      这次的namespace实现和当初的实现有所不同,更接近于C++的语法。

    声明namespace时在文件里加上例如

    namespace blogbus::test;

    function foo(){
        echo "foo";

    class Test{
        function bar(){
            echo "bar";
        }
    }

      该文件中的类和函数:foo,Test就属于blogbus::test的命名空间。在其他文件包含该文件后,可以用blogbus::test::foo()来调用函数,用blogbus::test::Test来使用类。如果只是这样的话那打字还是很麻烦的。所以可以使用
    import blogbus::test::Test;
    之后就可以直接用Test了。也可以
    import blogbus;
    之后可以用test::Test来使用。可惜目前的实现没有类似Java的import xxx.*; 或是python的from xxx import *;这样的语法。要导入许多东西的时候还是有些麻烦。

       既然namespace是为了解决命名冲突的问题,那么使用import来节省打字,保护键盘的时候还是需要避免import进来的东西和原有的东西重名的问题。所以import还可以这样用:import blogbus::test::Test as Blogbus。这时,就可以用Blogbus这个名字来使用blogbus::test::Test。你可以$test = new Blogbus();然后echo get_class($test);看看结果,会发现输出的仍然是blogbus::test::Test。

  • Bus和知了

    【神仙】 2007-07-27 22:04


    院子里出现一只半死的知了,可能是从树上掉下来的


    被bus的鼻子发现了


    似乎很好吃的样子……


    我尝尝看


    好硬啊~比肉骨头还硬


    算了,还是让它去吧

日历

个人资料

【神仙】

世人都晓神仙好~~~~