Maison >développement back-end >tutoriel php >Modèle de conception PHP 1 : espace de noms, classe de chargement automatique, spécification de codage PSR-0
本篇文章介绍的内容是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('test1.php'); require_once('test2.php'); 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('autoload'); //自定义一个自动加载函数,$class为类名,无须传参。spl_autoload_register()方法自动认别 function autoload($class) { require_once(__DIR__.'/'.$class.'.php'); } Demo1::test(); Demo2::test(); //php5.3版本以下,使用__autoload()方法 function __autoload($class) { require_once(__DIR__.'/'.$class.'.php'); } ?>
三、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.'/'.str_replace('\\','/',$class).'.php'); } } ?>
App/Controller/Home/Index.php
<?php namespace App\Controller\Home; class Index { static function test() { echo "Home控制器下的test()静态方法"; } } ?>
index.php
<?php define('BASEDIR',__DIR__); require_once(BASEDIR.'/Frame/Autoloader.php'); spl_autoload_register('Frame\\Autoloader::autoload'); App\Controller\Home\Index::test(); //输出结果:Home控制器下的test()静态方法 ?>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!