首页 > 编程语言 >【web开发】PHP命名空间的别名和导入

【web开发】PHP命名空间的别名和导入

时间:2023-06-20 23:00:55浏览次数:44  
标签:__ web 别名 空间 导入 命名 PHP

前言

前面两篇文章我们详细介绍了PHP命名空间的定义和基本使用以及命名空间相关术语解读,对PHP的命名空间的有了更多的了解,本文我们再深入探索PHP命名空间的更多使用技巧。废话不多说,直接上菜。

命名空间的别名和导入

涉及到命名空间的使用,命名空间中的别名和导入这俩个概念我们是无法逃避的,学会灵活使用,能让我们更好地玩转PHP。

别名和导入可以看作是调用命名空间元素的一种快捷方式,允许通过别名引用或者导入外部的完全限定名称(有关于完全限定名称的相关概念我们上篇文章有具体介绍,可参考上一文章),是命名空间的一个重要特征。这就有点类似于在Linux文件系统中可以创建对其他文件或者目录的软连接。PHP命名空间支持两种使用别名或导入的方式:为类名称使用别名,或者为命名空间名称使用别名。注意:PHP不支持导入函数或者常量。在PHP中,别名是通过操作符use来实现的,接着我们通过具体的例子来了解相关的用法:

软连接是linux中一个常用命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。简单来说,就是相当于windows里面的快捷方式。

<?php
namespace com\admin;
class User{
	function run(){}
}

namespace shop;

use com\admin; //导入命名空间com\admin;
$comAdmin = new admin\User(); //导入命名空间之后可使用下限定调用相关元素


use com\admin as ca; //使用命名空间别名
$comAdmin = new ca\User(); //使用别名代替命名空间调用元素

use com\admin\User; //直接导入一个类
$comAdmin = new User(); //导入类,可直接使用非限定名称调用元素


use com\admin\User as caUser; //为类使用别名
$comAdmin = new caUser(); //直接通过别名调用类

最需要注意的一点是,如果在使用use进行导入的时候,当前空间有相同的名字的元素,由于发生冲突,将会发生致命错误。下面我们看看具体代码:

<?php
namespace com\admin;
class User{
	function run(){}
}

namespace shop;
class User{
	function run(){}
}
class CAUser{
	function run(){}
}
<?php
namespace com\admin;
class User{
	function run(){}
}

namespace shop;
class User{
	function run(){}
}
class CAUser{
	function run(){}
}

use com\admin\User; //直接导入一个类
$comAdmin = new User(); //与当前命名空间中User发生冲突,程序产生致命错误


use com\admin\User as CAUser; //为类使用别名
$comAdmin = new CAUser(); //与当前命名空间中CAUser发生冲突,程序产生致命错误

执行结果:

【web开发】PHP命名空间的别名和导入_导入

【web开发】PHP命名空间的别名和导入_导入_02

除了使用别名和导入之外,我们还可以通过namespace 关键字和__NAMESPACE__(注:两边都是两个下划线)魔法常量动态的访问元素.其中namespace关键字表示当前命名空间,而魔法常量__NAMESPACE__的值是当前命名空间的名称,__NAMESPACE__可以通过组合字符串的形式来动态调用,下面我们看看实际例子:

<?php
namespace com\admin;

const PATH = '/com/admin';
class User{
	function run(){
		echo "这是命名空间com\admin下的User类的方法<br>";
	}
}

echo namespace\PATH . '<br>'; //namespace表示当前空间 <br>是换行符,为了打印结果可读性更好
$comAdmin = new namespace\User(); //使用namespace代替\com\admin调用类
$comAdmin->run();

echo __NAMESPACE__ . '<br>';
$comAdmin_ClassName = __NAMESPACE__ . '\User';
$caUser = new $comAdmin_ClassName();
$caUser->run();

执行结果如下:

【web开发】PHP命名空间的别名和导入_PHP_03

总结

在上面动态调用的例子中,字符串形式的动态调用方式,需要注意的是使用双引号的时候,特殊字符可能被转义,比如:在__NAMESPACE__."\User"的时候,"\U"在双引号字符串中会被转义.此外,PHP在编译脚本的时候就确定了元素所在的空间,以及导入的情况.而在解析脚本的字符串形式的调用只能认为是非限定名称和完全限定名称,而永远不可能使限定名称.

标签:__,web,别名,空间,导入,命名,PHP
From: https://blog.51cto.com/micai01/6525887

相关文章

  • webView链接字串以及多点触摸问题
    packagefirsrdroid.tutorial.mywebview;importandroid.app.Activity;importandroid.os.Bundle;importandroid.webkit.WebView;importandroid.webkit.WebViewClient;publicclassUsingMyWebviewextendsActivity{WebViewmWebView;/**Calledwhentheact......
  • webView中长按后取消菜单js实现
    <!DOCTYPEhtml><html><head><script>functionabsorbEvent_(event){vare=event||window.event;e.preventDefault&&e.preventDefault();e.stopPropagation&&e.stopPropagation();......
  • Springboot web,三层架构, IOC&DI 使用总结2023
    Springbootweb,三层架构,IOC&DI使用总结2023一.spring.io全家桶springbootspringframework基础框架,配置繁琐,入门难度大--》springbootspringcloudspringsecurityspringdataspring发展到今天是一个生态圈,提供了若干个子项目,每个子项目用于完成特定的功能。二.sp......
  • 基于php的在线宠物电商交易平台的设计与实现
    随着社会的高速发展,社会压力逐步增加,忙碌的工作使得人们无暇过多地陪伴亲人。此时,人们也已不再只是追求物质上的享受,也逐渐看重精神上的享受。所以,排遣压力,寻求生活上的陪同者,享受更好的生活等理由,使得宠物在人类的生活中开始充当越来越重要的角色,随着养宠物的家庭的不断增多,宠物经......
  • Pycharm更换pip源与依赖包导入导出
    1Pycharm更换安装源在下载安装好Pycharm后,一个在实际编程开发过程中非常重要的问题是第三方库添加,然而Python默认的源网络速度有点慢,因此,我们常常需要做的是更换Pycharm的安装源。首先在项目开始出,点击下面的PythonPackages,然后点击左上方的小齿轮(注意不是右上方的小齿轮),过......
  • Springboot实现WebSocket
    一、什么是webSocketWebSocket是HTML5下一种新的协议(Websocket协议本质上是一个基于tcp的协议),它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的,WebSocket是一个持久化的协议。二、修改配置文件在application.properties,修改内容为:server.port=......
  • 基于PHP理工大社区管理系统的设计与实现
    随着信息技术的飞速发展,特别是网络和数据库技术的发展,计算机已经成为当今处理信息数据的主要工具。数据库技术已经成为计算机应用技术中的一个重要组成部分,对于大量的数据,使用数据库来存储管理会比文件来存储数据,管理起来更高效、方便。人们对于现实中的各种事物的管理,已经越来越依......
  • Web编辑器从word复制粘贴图片
    ​图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-editor的二进制流保存为例:打开umeditor.js,找到UM.plugins['autoupload'],然后找到autoUploadHandler方法,注释掉其中的代码。加入下面的代码://判断剪贴......
  • springboot+websocket简单使用
    一、引入依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.o......
  • webview显示内置dialog
    getWindow().requestFeature(Window.FEATURE_PROGRESS);WebViewmWebView=(WebView)findViewById(R.id.mywebview);mWebView.getSettings().setJavaScriptEnabled(true);finalActivityactivity=this;mWebView.setWebChromeClient(newWebChromeClient(){......