Unique

归档:DIY PHP

PHP Annotation路由实现研究

<?php
class Controller
{
    /**
     * @Route("/index")
     */
    public function index()
    {
        echo 'index';
    }

    /**
     * @Route("/go")
     */
    public function go()
    {
        echo 'go';
    }
}

$controller = new Controller();
$a = new ReflectionClass($controller);
foreach ($a->getMethods() as $method) {
    preg_match("/@Route\(\"(.+)\"\)/", $method->getDocComment(), $ret);
    var_dump($ret[1]);
}

观察者模式 AND 自动加载配置

  在前端控制器进行渲染时,假如不通过硬编码的方式,而通过自动加载配置来实现前端模版渲染的话那对于程序猿以及项目的二次开发而言都是极好的。
  在代码上,将前端模版渲染的行为动作提取共性,使用观察者模式在渲染时自动加载配置

减少冗余代码,减少后期开发和维护的工程量,增加代码复用性
在不失灵活性的前提下,保证各前端控制器模板渲染的个性(独立性)
自动配置减少了开发的难度,对于流程的开发更加清晰
...More...

代码示例下载:20150217.rar

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();

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

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