zoukankan      html  css  js  c++  java
  • Modern PHP interface 接口

    The right way

    /dev/hell Code

    Response.php

    接口 demo:

    modern-php/
    ├── data
    │   └── stream.txt
    └── interface
    ├── CommandOutputDocument.php
    ├── DocumentStore.php
    ├── Documentable.php
    ├── HtmlDocument.php
    ├── StreamDocument.php
    └── index.php

    // interface

    <?php
    
    interface Documentable {
        public function getId();
    
        public function getContent();
    }
    Documentable.php

    //  class x 3 implements interface

    <?php
    require_once __DIR__ . '/Documentable.php';
    
    class HtmlDocument implements Documentable {
        protected $url;
    
        public function __construct($url) {
            $this->url = $url;
        }
    
        public function getId() {
            return $this->url;
        }
    
        /**
         * @return string
         */
        public function getContent() {
            $ch = curl_init();
            curl_setopt_array($ch, [
                CURLOPT_URL => $this->url,
                CURLOPT_RETURNTRANSFER => 1,
                CURLOPT_CONNECTTIMEOUT => 3,
                CURLOPT_FOLLOWLOCATION => 1,
                CURLOPT_MAXREDIRS => 3
            ]);
            $html = curl_exec($ch);
            curl_close($ch);
            return $html;
        }
    }
    HtmlDocument.php
     1 <?php
     2 require_once __DIR__ . '/Documentable.php';
     3 
     4 class StreamDocument implements Documentable {
     5 
     6     protected $resource;
     7     protected $buffer;
     8 
     9     public function __construct($resource, $buffer = 4096) {
    10         $this->resource = $resource;
    11         $this->buffer = $buffer;
    12     }
    13 
    14     public function getId() {
    15         return 'resource-' .(int)$this->resource;
    16     }
    17 
    18     public function getContent() {
    19         $streamContent = '';
    20         rewind($this->resource);
    21         while (feof($this->resource) === false) {
    22             $streamContent .= fread($this->resource, $this->buffer);
    23         }
    24         return $streamContent;
    25     }
    26 }
    StreamDocument.php
     1 <?php
     2 require_once __DIR__ . '/Documentable.php';
     3 
     4 class CommandOutputDocument implements Documentable {
     5 
     6     protected $command;
     7 
     8     public function __construct($command) {
     9         $this->command = $command;
    10     }
    11 
    12     public function getId() {
    13         return $this->command;
    14     }
    15 
    16     public function getContent() {
    17         return shell_exec($this->command);
    18     }
    19 }
    CommandOutputDocument.php

     // Container

     1 <?php
     2 include 'Documentable.php';
     3 
     4 class DocumentStore {
     5     protected $data = [];
     6 
     7     public function addDocument(Documentable $document) {
     8         $key = $document->getId();
     9         $value = $document->getContent();
    10         $this->data[$key] = $value;
    11     }
    12 
    13     public function getDocuemnts() {
    14         return $this->data;
    15     }
    16 }
    DocumentStore.php

    // Usage:

    <?php
    include 'DocumentStore.php';
    
    include 'HtmlDocument.php';
    include 'StreamDocument.php';
    include 'CommandOutputDocument.php';
    
    $documentStore = new DocumentStore();
    
    $htmlDoc = new HtmlDocument('https://php.net');
    $documentStore->addDocument($htmlDoc);
    
    $streamDoc = new StreamDocument(fopen('../data/stream.txt', "rb"));
    $documentStore->addDocument($streamDoc);
    
    $cmdDoc = new CommandOutputDocument('cat /etc/hosts');
    $documentStore->addDocument($cmdDoc);
    
    print_r($documentStore->getDocuemnts());
    index.php
  • 相关阅读:
    iOS UI(布局)约束是什么?view1.attr1 = view2.attr2 * multiplier + constant
    编程范式-声明式编程
    平庸的投资人和优秀的投资人差在哪儿
    编程语言的发展趋势及未来方向
    再读:编程语言的发展趋势及未来方向
    编程语言的发展趋势:声明式动态并发
    命令式编程与声明式编程
    声明式(编程)语言是解释型语言
    DSL-领域特定语言(英语:domain-specific language、DSL)
    声明式编程
  • 原文地址:https://www.cnblogs.com/mingzhanghui/p/9312038.html
Copyright © 2011-2022 走看看