Heim >Backend-Entwicklung >PHP-Tutorial >php 设计模式准备篇

php 设计模式准备篇

WBOY
WBOYOriginal
2016-06-23 13:14:22946Durchsuche

要了解设计模式 首先我们要先了解 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__;  }}?>

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

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

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

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

Config/Object.php

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

Config/Loader.php

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

App/Home/Index.php

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:php_workermanNächster Artikel:Piwigo 2.8.0 发布