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;
  • 相关阅读:
    C#实体类对象修改日志记录
    C#中关于增强类功能的几种方式
    Elasticsearch入坑指南之RESTful API
    React入门实例
    .Net Core+Vue.js+ElementUI 实现前后端分离
    ElasticSearch入坑指南之概述及安装
    MySQL优化技巧
    RabbitMQ入门教程——路由(Routing)
    RabbitMQ入门教程——发布/订阅
    RabbitMQ入门教程——工作队列
  • 原文地址:https://www.cnblogs.com/happig/p/5399707.html
Copyright © 2011-2022 走看看