Home > Backend Development > PHP Tutorial > php 设计模式准备篇

php 设计模式准备篇

WBOY
Release: 2016-06-23 13:14:22
Original
945 people have browsed it

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

下面我们来说一下

命名空间

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

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

namespace my\name;

demo

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

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

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

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

  但是用__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

<?phpdefine('BASEDIE',__DIR___);require_once('/Config/Loader.php');spl_autoload('\\Config\\Loader.php::autoload');Config\Object::test();App\Home\Index::test();
Copy after login

Config/Object.php

<?phpnamespace Config;class Object{ static function test(){ echo "nihao"; }}
Copy after login

Config/Loader.php

<?phpnamespace Config;class Loader{ static function autoload($class) { require_once(BASEDIE.'/Config/'.str_replace('\\','/',$class).'.php'); }}
Copy after login

App/Home/Index.php

<?phpnamespace App\Home;class Index{ static function test(){ echo "ceshixinxi"; }}<br /><br />
Copy after login

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template