PHP之道阅读记录 一

DateTime类的使用

   具体规则手册有详细介绍,不再陈述

php层面的utf-8

   (php底层未对unicode的支持) 因此php的普通字符串处理函数strpos,substr。。。之类无法对中文进行友好的支持,所以php设计了mb_*函数系列  (具体函数操作,手册有详细介绍)

    数据库层面的utf-8:我们在连接mysql是必须指定字符集utf8mb4(utf8mb4可以对utf8进行更完整的支持)

    浏览器层面的utf-8:在页面中指定meta标签或者在content-type响应头设置(这种方式快一些)

依赖注入

   定义:(出自维基百科)依赖注入是一种允许我们从硬编码的依赖中解耦出来,从而运行时或编译时能够修改的软件设计模式  

      通俗理解:依赖注入通过构造注入,函数调用或者属性的设置来提供组件的依赖关系

     最简单的依赖注入:

       比如我们有一个DateBase类,他需要一个适配器来与数据库进行交互。如果我们在类的构造函数去将这个适配器进行实例化 。就会产生了耦合

<?php
namespace Database;

class Database
{
    protected $adapter;

    public function __construct()
    {
        $this->adapter = new MySqlAdapter;
    }
}

class MysqlAdapter {}

      于是我们将这个适配器注入到DataBase类中来进行解耦

<?php
namespace Database;

class Database
{
    protected $adapter;

    public function __construct(MySqlAdapter $adapter)
    {
        $this->adapter = $adapter;
    }
}

class MysqlAdapter {}

   复杂的问题

      控制反转:一个系统通过组织控制和对象的完全分离来实现‘控制反转’ (好深奥的样子!)

        例子: MVC 框架通常会提供超类或者基本的控制器类以便其他控制器可以通过继承来获得相应的依赖 

      依赖反转准则:依赖反转准则是面向对象设计准则SOLID(没记住所有需要去复习!)中的D,倡导'依赖于抽象而不是具体‘ (简单来说就是依赖应该是接口或者抽象类,而不是一个具体的实现类)

      根据这个准则进行DataBase的重构:

<?php
namespace Database;

class Database
{
    protected $adapter;

    public function __construct(AdapterInterface $adapter)
    {
        $this->adapter = $adapter;
    }
}

interface AdapterInterface {}

class MysqlAdapter implements AdapterInterface {}

    容器 :首先依赖注入容器和依赖注入是不相同的概念,容器是帮助我们更方便的实现依赖注入的工具,但是是他们通常被误用来实现反模式设计:服务定位(Service Location)

       (额 为什么这些人要起这么深奥的名字啊!)

      

    延伸阅读 :http://ralphschindler.com/2011/05/18/learning-about-dependency-injection-and-php      

        http://fabien.potencier.org/what-is-dependency-injection.html  (我喜欢这篇)

 

第一篇先到此结束

      

posted @ 2019-03-17 20:39  lizyn  阅读(136)  评论(0)    收藏  举报