Unique

Delegation

class Coder
{
    public function write($name)
    {
        echo $name . ' finish<br/>';
    }
}
class Manager
{
    protected $_member = array();
    public function __set($name, Coder $value)
    {
        $this->_member[$name] = $value;
    }
    public function work()
    {
        foreach ($this->_member as $name => $coder) {
            $coder->write($name);
        }
    }
}
$manager = new Manager();
$john = new Coder();
$mike = new Coder();
$manager->John = $john;
$manager->Mike = $mike;
$manager->work();

  Delegation是一种设计模式,我翻译它为委派模式。它通过经理类来督促并分配任务给指定的码农来完成代码工作。

理解后期静态绑定

class Grandfather
{
    public static $_age = 80;
    public static function age()
    {
        echo self::$_age . '<br/>';
    }
    //后期静态绑定
    public static function staicAge()
    {
        echo static::$_age . '<br/>';
    }
    //get_called_class()方式后期静态绑定
    public static function getAge()
    {
        $obj = get_called_class();
        echo $obj::$_age;
    }
}
class Father extends Grandfather
{
    public static $_age = 50;
}
class Son extends Father
{
    public static $_age = 20;  
}
//测试
Son::age();
Son::staicAge();
Son::getAge();

  上述两行的调用大家猜测下最终结果是什么?

阅读剩余部分......

Stat插件升级到1.0.3

  Stat插件是Hanny的作品,在使用中,我发现,我撰写文章并进行调试过程中文章都是计数的,其实这符合代码逻辑。但是却制造了一些虚假统计,因为这是作者本人所增加的访问量,于是我想实现假如是作者访问自己文章则不增加访问量。至于管理者那当然是增加。因此将Hanny的1.0.2版本升至1.0.3,然后放上下载链接:Stat.rar
  在此,再次声明:本插件基于Hanny的1.0.2版本开发,源码脚本文件中历史版本中声明了Hanny所做的更改和贡献,也谢谢Hanny在之前版本带来的功能呢。

FluentInterface

  最近时不时的会去学习下设计模式,在DesignPatternsPHP学习中,发现一个特别喜欢的设计模式————FluentInterface,我找不到它的翻译。我个人把它理解为连贯操作/级联操作。在实际中,我发现ThinkPHP和Typecho中均使用了这种模式,并且都在数据库操作类使用这种模式进行连贯操作。于是我用这个模式编写了一个计算器类Calculator,代码如下:

阅读剩余部分......

完善array_column,我的array_column

class Util
{
    /**
     * 获取多列的数组
     *
     * @access protected
     * @param array $array    待处理数组
     * @param array $key      期望键索引
     * @param boolean $strict 是否严格(每个数组满足所有键索引存在)
     * @return array          结果集
     */
    protected function _arrayColumns(array $array, array $key, $strict = false)
    {
        $result = array();
        foreach ($array as $val) {
            $temp = array();
            foreach ($key as $value) {
                if (array_key_exists($value, $val)) {
                    $temp[$value] = $val[$value];
                }
            }
            if (!$strict || ($strict && count($temp) == count($key))) {
                $result[] = $temp;
            }
        }
        return $result;
    }
    
    /**
     * 获取给定索引的数组
     *
     * @access public
     * @static
     * @param array $array    待处理数组
     * @param mixed $key      期望键索引
     * @param boolean $strict 是否严格(每个数组满足所有键索引存在),仅对多列生效
     * @return array          结果集
     */
    public static function arrayColumn(array $array, $key, $strict = false)
    {
        //多列数组,多列处理
        if (is_array($key) && count($key) > 1) {
            return $this->_arrayColumns($array, $key, $strict);
        }
        $key = is_array($key) ? $key[0] : $key;
        if (function_exists('array_column')) {
            return array_column($array, key);
        }
        $result = array();
        foreach ($array as $val) {
            if (array_key_exists($key, $val)) {
                $result[] = $val[$key];
            }
        }
        return $result;
    }
}

需求决定了我的改造
假如你有其他需求或者更好的建议,请不要吝啬,联系我