>  기사  >  백엔드 개발  >  PHP 디자인 패턴 1: 네임스페이스, 자동 로딩 클래스, PSR-0 코딩 사양

PHP 디자인 패턴 1: 네임스페이스, 자동 로딩 클래스, PSR-0 코딩 사양

不言
不言원래의
2018-04-09 16:11:381725검색

本篇文章介绍的内容是php设计模式一之命名空间、自动加载类、PSR-0编码规范 ,现在分享给大家,有需要的朋友可以参考一下

一、命名空间:解决在生产环境中多人协同开发时出现类名或函数名冲突的问题;
test1.php

<?php
namespace Test1;
function test(){
    echo "Test1命名空间下的test()方法";
}
?>

test2.php

<?php
namespace Test2;
function test(){
    echo "Test2命名空间下的test()方法";
}
?>

test.php

<?php
require_once(&#39;test1.php&#39;);
require_once(&#39;test2.php&#39;);
Test1\test();    //调用Test1命名空间下的test()方法
Test2\test();
?>

二、自动加载类:解决在项目中引入过多的依赖类文件问题;
demo1.php

<?php
class Demo1{
    static function test(){
        echo "Demo1类中的test()静态方法";
    }
}
?>

demo2.php

<?php
class Demo2{
    static function test(){
        echo "Demo2类中的test()静态方法";
    }
}
?>

demo.php

<?php
//php5.3+版本,spl_autoload_register()自动注册加载类。参数为某个自定义的函数
spl_autoload_register(&#39;autoload&#39;);
//自定义一个自动加载函数,$class为类名,无须传参。spl_autoload_register()方法自动认别
function autoload($class) {
    require_once(__DIR__.&#39;/&#39;.$class.&#39;.php&#39;);
}
Demo1::test();
Demo2::test();
//php5.3版本以下,使用__autoload()方法
function __autoload($class) {
    require_once(__DIR__.&#39;/&#39;.$class.&#39;.php&#39;);
}
?>

三、PSR-0编码规范
1)、必须使用命名空间并且与文件的绝对路径一致;
2)、类名首字母须大写且与文件名保持一致;
3)、除入口文件以外其他php文件必须只有一个类且没有可执行的代码;

四、基于PSR-0编码规范编写一套基础框架
1)、目录结构

App            存放业务逻辑及功能实现的代码
|--Controller
    |--Home
       |--Index.php
Frame          存放与业务逻辑无关的代码,框架部分
|--Autoloader.php  自动加载类
index.php       单一入口文件

Autoloader.php

<?php
namespace Frame;
class Autoloader
{
    static function autoload($class)
    {
        require_once(BASEDIR.&#39;/&#39;.str_replace(&#39;\\&#39;,&#39;/&#39;,$class).&#39;.php&#39;);
    }
}
?>

App/Controller/Home/Index.php

<?php
namespace App\Controller\Home;

class Index
{
    static function test()
    {
        echo "Home控制器下的test()静态方法";
    }
}
?>

index.php

<?php
define(&#39;BASEDIR&#39;,__DIR__);
require_once(BASEDIR.&#39;/Frame/Autoloader.php&#39;);
spl_autoload_register(&#39;Frame\\Autoloader::autoload&#39;);
App\Controller\Home\Index::test();

//输出结果:Home控制器下的test()静态方法
?>

                                                  

위 내용은 PHP 디자인 패턴 1: 네임스페이스, 자동 로딩 클래스, PSR-0 코딩 사양의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP의 세션 제어다음 기사:PHP의 세션 제어