include的返回值

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

 

慢下来也是不容易的

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

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

DIY了一个反光板

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

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

装上以后拍了一张照片


原图裁切

PHP实现的事件

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

<?php

/**
* 事件
*
* @author xiezhenye
* @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);
        }
    }
}

到田子坊八号桥转了圈

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

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

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

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

   

bus的访问统计

  今天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个是关于汉服运动的。莫非是有几个学校出了这样的考试题目?还有好几篇是技术文章。看来原创的技术文章还是很受欢迎的。