zoukankan      html  css  js  c++  java
  • php设计模式之解释器模式

    解释器设计模式用于分析一个实体的关键元素,并且针对每个元素都提供自己的解释或相应的动作。

    <?php
    /**
    * 解释器模式
    */
    class User
    {
        protected $_username;
    
        public function __construct($username)
        {
            $this->_username = $username;
        }
    
        public function getProfilePage()
        {
            $profile = "<h2>I like never again</h2>";
            $profile .= "I love all of the songs, My favorite CD:<br/>";
            $profile .= "{{myCD.getTitle}}<br/>";
            $profile .= "My name is ";
            $profile .= "{{myCD.getName}}";
    
            return $profile;
        }
    }
    
    /**
    *ad
    */
    class userCD
    {
        protected $_user = NULL;
        public function setUser($user)
        {
            $this->_user = $user;
        }
    
        public function getTitle()
        {
            return 'test';
        }
    
        public function getName()
        {
            return '111';
        }
    }
    /**
    * interpreter
    */
    class userCDInterpreter
    {
        protected $_user = NULL;
        function setUser($user)
        {
            $this->_user = $user;
        }
    
        public function getInterpreted()
        {
            $profile = $this->_user->getProfilePage();
            if (preg_match_all('/{{myCD.(.*?)}}/', $profile, $triggers, PREG_SET_ORDER)) {
                $replacements = array();
    
                foreach ($triggers as $trigger) {
                    $replacements[] = $trigger[1];
                }
                $replacements = array_unique($replacements);
    
                $myCD = new userCD();
                $myCD->setUser($this->_user);
    
                foreach ($replacements as $replacement) {
                    $profile = str_replace("{{myCD.{$replacement}}}", call_user_func(array($myCD, $replacement)), $profile);
                }
            }
            
            return $profile;
        }
    }
    $username = 'aaron';
    $user = new User($username);
    $interpreter = new userCDInterpreter();
    $interpreter->setUser($user);
    $echo = $interpreter->getInterpreted();
    
    
    print "<h1>{$username}'s Profile</h1>";
    
    print $echo;
  • 相关阅读:
    三路快排
    双路快排
    随机快排
    快速排序
    双向链表
    单向链表
    堆排序
    二分插入、bisect
    jmockit使用总结-MockUp重点介绍
    java拼接字符串、格式化字符串方式
  • 原文地址:https://www.cnblogs.com/happig/p/5399707.html
Copyright © 2011-2022 走看看