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

php自5.3以后引入了命名空间namespace这一特性使得php在面向对象设计的过程中更加规范清晰,同时在框架的架构中自动载入模式也完全尽齐用来提高框架自身的性能--按需载入

无命名空间声明其实为在根命名空间下

<?php
/**
* 命名空间为Project
* 则类的完整名为 Project\Web 而不是Web
*/

namespace Project;

class Web
{

	function __construct()
	{
		echo __NAMESPACE__ . ‘<br/>‘;
		echo __CLASS__ . ‘<br/>‘;
	}
}
//若不已‘\‘开头则为使用当前命名空间下的类
new Web();
//当然我们可以指出完整的类名来 \Project\Web 为根命名空间下的Project命名空间下的Web类
new \Project\Web();
?>

1、若当前无命名空间声明,则默认在根命名空间‘\‘下

2、若当前存在命名空间生命,则默认的类实例化时都是此命名空间为前提,除非使用use声明某类的完整类名

比如

<?php
namespace Web;
use Common\Tools as CommonTools;

class Tools {
}
//如同linux的路径
//当前目录为 usr, 则 local 意味当前目录usr下的local,但 /var 则意味根目录下的 var
new Tools(); //从当前为命名空间Web开始,所以Tools的完整类名为Web\Tools
new \Common\Tools(); //从根命名空间‘\‘开始,访问的是Common\Tools
new CommonTools(); //因为使用了use声明,就如同将\Common\Tools 别名成 CommonTools

?>

其实php的use声明并不是将此类导入到当前工作区域,而是单单指明

use Web\Tools;

Tools的类名是Web\Tools

当你new的时候他才会检查当前工作区中有没有这个类,没有的话就会检测有没有写自动载入函数

若也没有的话那就报错了,否则会调用你的自动载入函数

将你要实例化的完整类名传递进去

new Tools(); //这时会实例化名为Web\Tools的类,若没有include进来,且有些自动载入函数,则会将Web\Tools传递给次函数,你可以通过传递的类名做自己的引入处理

框架大都是根据类名做路径映射

比如Yii框架

//当前命名空间
namespace app\Controllers;
//声明Controller为yii\web命名空间下的,此后若有用到Controller的地方,完整名皆为yii\web\Controller
use yii\web\Controller;
//继承也会要求解析此类,所以当前工作目录会要求检查是否有yii\web\Controller的类,可惜没有
//但系统会在给你一次几乎,看是否有自动加载函数,Yii当然有,传递给加载函数‘yii\web\Controller‘
作为参数
//加载函数解析类名发现是以yii开头的,则做路径映射,将yii\web\Controller映射为其框架类库文件的路径
//即vendor\yiisoft\yii2, 拼接上web\Controller 拼接上.php后缀,就获取到了这个文件
//文件里保存的类的命名空间为yii\web,类名为Controller
class IndexController extends Controller {

}
时间: 2024-10-10 06:24:14

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

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

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

[转载]SharePoint 2013搜索学习笔记之搜索构架简单概述

Sharepoint搜索引擎主要由6种组件构成,他们分别是爬网组件,内容处理组件,分析处理组件,索引组件,查询处理组件,搜索管理组件.可以将这6种组件分别部署到Sharepoint场内的多个服务器上,组成适合需求的Sharepoint搜索场,搜索场的体系结构设计主要参考量是爬网内容量,微软根据爬网内容量不同将搜索场分为大型场,中型场和小型场,更多详细信息可参考: SharePoint Server 2013 中的搜索概述和在SharePoint Server 2013 中规划企业搜索体系结构.

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

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

Sharepoint2013搜索学习笔记之搜索构架简单概述(一)

Sharepoint搜索引擎主要由6种组件构成,他们分别是爬网组件,内容处理组件,分析处理组件,索引组件,查询处理组件,搜索管理组件.可以将这6种组件分别部署到Sharepoint场内的多个服务器上,组成适合需求的Sharepoint搜索场,搜索场的体系结构设计主要参考量是爬网内容量,微软根据爬网内容量不同将搜索场分为大型场,中型场和小型场,更多详细信息可参考:SharePoint Server 2013 中的搜索概述和在SharePoint Server 2013 中规划企业搜索体系结构. S

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

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

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

关于命名空间: 最早的php是没有命名空间的概念的,这样不能存在相同名称的类或者函数,当项目变大了之后,产生冲突的可能性就高了,代码量也会变大,为了规划,从php5.3开始对命名空间就支持了. 说明代码: test1.php<?php //声明命名空间 namespace Test1; function test(){ echo "test1<br/>"; } test2.php <?php //声明命名空间 namespace Test2; function

一个简单的监控网站是否正常并自动重启服务的shell脚本

#!/bin/sh if [ -z "`curl --connect-timeout 15 --max-time 20 --head --silent http://localhost/index.php|head -n 1|grep '200'`" ];then echo -e "$(date +%Y-%m-%d)\n" killall nginx killall php-fpm /usr/local/nginx/sbin/nginx -c conf/nginx.

Sharepoint2013商务智能学习笔记之简单概述(一)

SharePoint 2013 中的商业智能 (BI) 提供集 Microsoft Office 应用程序和其他 Microsoft 技术于一体的全面的 BI 工具.这些 BI 工具有:Excel 2013.SharePoint 2013 中的 Excel Services.SharePoint Server 2013 中的 PerformancePoint Services.SharePoint 中的 Visio Services.SharePoint 2013 和 Microsoft SQL

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

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