php 设计模式--准备篇

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 设计模式--准备篇相关的知识,希望对你有一定的参考价值。

要了解设计模式 首先我们要先了解 php的命名空间和类的自动载入的功能

下面我们来说一下

命名空间

概念缘由:比如一个a.php的文章 但是我们需要两个 此时同一个目录下不可能存在两个a.php 那么我们可以放到my/home 和 my/home1的目录下 此时命名空间就有了它的意义

那么空间即为my/home/a.php

namespace my\name;

demo

<?php	
//file a.php
namespace my/home;
const test = ’Atest’; 
function test() { 
  return __FUNCTION__; 
}
class Test{
  public function __construct(){
    return __METHOD__;
  }
}
?>

  那么下面就是自动加载的问题了

原本最为简单的自动加载是

function __autoload($class) {
  $dir = ’./’;
  set_include_path(get_include_path().PATH_SEPARATOR.$ids_dir);
  $class = str_replace(’\’, ’/’, $class) . ’.php’; 
  require_once($class); }

  但是用__autoload()这种方法已经out了

现在我们用的更多的是spl_autoload_register(优势)

面试可能设计到

对比:

1。spl_autoload_register可以进行多次的写注册加载函数,谁先注册谁就先调用,但是_autoload()只能调用一次

2.spl_autoload_register可以catch错误

3.既然可以注册那么我们也可以用spl_autoload_unregister()解除注册。

通过上面的学习我们可以进行一个psr的架构处理了

psr概念:

1、PSR-0规范

[1]命名空间必须与绝对路径一致

[2]类名首字母必须大写

[3]除去入口文件外,其他“.php”必须只有一个类

[4]php类文件必须自动载入,不采用include等

[5]单一入口

 

2、案例

[1]目录结构

技术分享

[2]源码

index.php

<?php
define(‘BASEDIE‘,__DIR___);
require_once(‘/Config/Loader.php‘);
spl_autoload(‘\\Config\\Loader.php::autoload‘);
Config\Object::test();
App\Home\Index::test();

Config/Object.php

<?php
namespace Config;

class Object{
    static function test(){
        echo "nihao";
    }
}

Config/Loader.php

<?php
namespace Config;


class Loader{
    static function   autoload($class)
    {
        require_once(BASEDIE.‘/Config/‘.str_replace(‘\\‘,‘/‘,$class).‘.php‘);
    }
}

App/Home/Index.php

<?php
namespace App\Home;

class Index{
    static  function test(){
        echo "ceshixinxi";
    }
}

以上是关于php 设计模式--准备篇的主要内容,如果未能解决你的问题,请参考以下文章

JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段

php PHP片段保存模式

搭建LMAP架构之 PHP 配置(最终篇)

超级有用的9个PHP代码片段

PHP必用代码片段

PHP代码-psysh调试代码片段工具