php设计模式--命名空间与自动载入

关于命名空间:

  最早的php是没有命名空间的概念的,这样不能存在相同名称的类或者函数,当项目变大了之后,产生冲突的可能性就高了,代码量也会变大,为了规划,从php5.3开始对命名空间就支持了。

说明代码:

test1.php<?php
//声明命名空间
namespace Test1;

function test(){
	echo "test1<br/>";
}
test2.php
<?php
//声明命名空间
namespace Test2;

function test(){
	echo "test2<br/>";
}

将test1.php ,test2.php引入到test.php中:

test.php
<?php
//引入test1,test2
require ‘test1.php‘;
require ‘test2.php‘;

//命名空间的使用
Test1\test();
Test2\test();

 如果不使用命名空间,显而易见php会报函数名重复致命错误,如果使用命令空间结果如下:

test1
test2

关于自动载入: 

  之前的php都是通过include或者require来引入php的,当项目越来越大的时候,如果一个php文件需要引入几十个php类的时候,那就会引入几十行,这样对管理代码和开发来说是很不方便的。在php5.2之后就提供了类的自动载入功能。

   在php5.2中提供了__autoload 方法来引入,但是当多个php文件同时使用此方法时会有函数名重复的可能,在php5.3中这个函数被废弃了,系统提供了一个spl_auto_register()的方法。当换成spl_auto_register自动载入类之后,可避免冲突。

Test3.phpclass Test3
{
	static function test()
	{
		echo "test3-class<br/>";
	}
}
Test4.php<?php
class Test4
{
	static function test()
	{
		echo "test4-class<br/>";
	}
}
<?php
spl_autoload_register(‘autoload1‘);//函数名作为参数传入
spl_autoload_register(‘autoload2‘);//函数名作为参数传入可支持多个

Test3::test();
Test4::test(); 

function autoload1($class)
{
  require __DIR__.‘/‘.$class.‘.php‘;
}

function autoload2($class)
{
	require __DIR__.‘/‘.$class.‘.php‘;
}

  

结果如下:

test3-class
test4-class

* 当php执行过程中发现你使用的类并不存在,这时候,php会把那个类名(Test3)告诉自动载入函数(autoload),然后我们只需要引入相关类就可以了。

总结:命名空间和自动载入对我们写好面向对象开发是很重要的。

时间: 2024-08-25 08:44:30

php设计模式--命名空间与自动载入的相关文章

PHP 类的命名空间 和自动载入

PHP 类的自动载入有两种方法,__autoload() 和 spl_autoload_register() ,就是在PHP代码中new一个类的时候,会自动触发,将类的类名包括命名空间作为参数传进入方法里,在方法里可根据命名空间和类名准确找到类文件,从而require或者inlcude进来.菜鸟一枚,作为备忘 <?php function auto($class){ //$class = A\B\E; /** 命名空间的自动载入 **/ $class_path = explode("\\&

php设计模式 一 (命名空间 类自动载入 PSR标准)

命名空间 可以将 PHP 命名空间与文件系统作一个简单的类比.在文件系统中访问一个文件有三种方式: 1 相对文件名形式如foo.txt.它会被解析为 currentdirectory/foo.txt,其中 currentdirectory 表示当前目录.因此如果当前目录是 /home/foo,则该文件名被解析为/home/foo/foo.txt. 2 相对路径名形式如subdirectory/foo.txt.它会被解析为 currentdirectory/subdirectory/foo.txt

命名空间与自动载入

1 <?php 2 namespace utils; 3 class Loader 4 { 5 static function autoload($class) 6 { 7 require BASEDIR."/".str_replace("\\", "/", $class).".php"; 8 } 9 } 1 <?php 2 use Design\AbstractFactory\IPadFactory; 3 4 d

PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入

① PHP 面向对象高级特性 ② 11 种 PHP 设计模式 ③ PSR-0,Composer,Phar 等最流行的技术 目标是掌握 PHP 各类设计模式,以及具备设计纯面向对象框架和系统的能力 [命名空间] 早期 php 没有命名空间的概念,所有的代码可以被认为是在同一个命名空间内运行,因此不能出现名称相同的类或函数: php 5.3 增加了命名空间的概念. 例:加入一个项目下有 3 个文件: test1.php: <?php function test(){ echo __FILE__; }

PHP——大话PHP设计模式——命名空间和类的自动载入

开发工具:phpstorm phpstudy 命名空间: 类的自动载入

简单概述PHP的命名空间及其在自动载入上的应用

php自5.3以后引入了命名空间namespace这一特性使得php在面向对象设计的过程中更加规范清晰,同时在框架的架构中自动载入模式也完全尽齐用来提高框架自身的性能--按需载入 无命名空间声明其实为在根命名空间下 <?php /** * 命名空间为Project * 则类的完整名为 Project\Web 而不是Web */ namespace Project; class Web { function __construct() { echo __NAMESPACE__ . '<br/&g

PHP命名空间和自动加载初探

参考资料: PHP手册-语言参考:http://php.net/manual/zh/language.namespaces.php 概要: 1. 声明了命名空间之后,下面的const, function, class都会划归到该命名空间. 2. 只有声明过命名空间的PHP 文件才能加载有命名空间的PHP文件. 3. PHP 5.3 及以上才能使用命名空间 名词: 关键字:namespace 用来声明 本PHP文件的命名空间 常量:__NAMESPACE__ 用来返回当前命名空间的名称 默认为空字

PHP 命名空间与自动加载机制

include 和 require 是PHP中引入文件的两个基本方法.在小规模开发中直接使用 include 和 require 没哟什么不妥,但在大型项目中会造成大量的 include 和 require 堆积.这样的代码既不优雅,执行效率也很低,而且维护起来也相当困难. 为了解决这个问题,部分框架会给出一个引入文件的配置清单,在对象初始化的时候把需要的文件引入.但这只是让代码变得更简洁了一些,引入的效果仍然是差强人意.PHP5 之后,随着 PHP 面向对象支持的完善,__autoload 函

【25】工具类实现自动载入与类

上一节中我们已经创建了相应的目录,但是我们发现我们创建的类并不能成功的跑起来,这是为什么呢?这主要是因为我们载入的类文件的位置不对造成的,我们之前是根据类名载入的是控制器,所以这里需要进行一下判断: private static function _autoload($className){ switch (true) { //判断是控制器 //Controller case strlen($className)>10 && substr($className, -10)=='Con