PHP面向对象03:命名空间

news2024/11/24 16:06:49

PHP面向对象03:命名空间

  • 一、命名空间基础
  • 二、子空间
  • 三、命名空间访问
    • 1. 非限定名称
    • 2. 限定名称
    • 3. 完全限定名称
  • 四、全局空间
  • 五、命名空间应用
  • 六、命名空间引入

一、命名空间基础

  • namespace,是指人为的将内存进行分隔,让不同内存区域的同名结构共存。
  • 基本语法:namespace 空间名字;
  • 作用:能够创建同名结构,包括函数、常量、类。
    在这里插入图片描述
  • 注意事项:
    1. 命名空间的声明必须在所有代码之前。
    2. 一个文件中只定义一个空间。

二、子空间

  • 命名空间子空间通过namespace+路径符号\实现
<?php
# 创建一级空间
namespace my_space;

# 创建子空间
namespace my_space\space1;
  • 也可以直接创建子空间

三、命名空间访问

1. 非限定名称

  • 直接访问空间元素的名字,此类访问的时当前代码所属空间内的元素。
  • 非限定名称访问就好比是访问当前自己文件夹下的所有文件。
<?php
namespace my_space;
function show(){
    echo __METHOD__;
}
# 非限定访问
show();

2. 限定名称

  • 在访问元素的前面使用相应的空间名字,限定名称访问时基于子空间来实现的。
  • 使用自己当前的子空间名字 + \ + 元素名称
  • 限定名称访问就好比是访问当前自己文件夹下的子文件夹内容。
<?php
namespace my_space\space1;
function show(){
    echo __NAMESPACE__;
}

namespace my_space;
function show(){
    echo __NAMESPACE__;
}

# 限定名称访问
space1\show();

3. 完全限定名称

  • 从根目录(全局空间)开始访问,使用\作为全局空间开始符号。
  • 完全限定名称访问就好比从磁盘根目录访问对应路径下的内容。
<?php
namespace my_space\space1;
function show(){
    echo __NAMESPACE__;
}

namespace my_space;
function show(){
    echo __NAMESPACE__;
}

# 完全限定名称访问
\my_space\space1\show();

四、全局空间

  • 即空间元素在没有定义空间的情况下所属的空间,也是所有定义的空间的顶级空间。
  • 全局空间没有名字。
    在这里插入图片描述
  • 所有的空间本质上都是在全局空间下划分的。
  • 全局空间元素的访问:使用完全限定名称访问。

在这里插入图片描述

  • 一旦命名空间出现,那么空间元素的访问就被限定在空间内。如果使用非限定名称访问,那么系统会以下解析逻辑:
    1. 首先一定在自己空间内查找
    2. 如果找不到元素,不同空间元素的处理不同
      • 系统常量、系统函数如果找不到,会自动去全局空间找
      • 系统类不会自动取全局空间找,而是直接报错

在这里插入图片描述

  • 如果一个文件有空间包含了一个没有空间的文件,那么要访问文件中的内容,需要使用全局空间 \

五、命名空间应用

  1. 创建文件夹:

    • root:根目录,存放用户可以直接访问的文件,比如入口,访问controller里的文件。
    • controller:存放业务逻辑文件,所有业务都是类文件,业务需要操作数据库,请求model里的文件。
    • model:存放数据库操作的类文件,一张表一个类文件。
    • core:存放核心工具
      在这里插入图片描述
  2. 编写代码

    • /core/DB.php
      <?php
      namespace core;
      class DB{
          public function __construct() {
              echo "数据库初始化" . "->";
          }
      
          public function query() {
              echo "数据查询" . "->";
          }
      }
      
    • /model/User.php
      <?php
      
      namespace model;
      
      use core\DB;
      
      include_once __DIR__ . "/../core/DB.php";
      
      class User {
          public function getAllUsers() {
              $sql = "select * from User";
              $db = new \core\DB();
              $db->query($sql);
              echo "查询所有用户数据" . "->";
          }
      }
      
    • /controller/User.php
      <?php
      
      namespace controller;
      include_once __DIR__ . "/../model/User.php";
      
      class User {
          public function index() {
              $u = new \model\User();
              $u->getAllUsers();
              echo '实现了用户业务操作' . "->";
          }
      }
      
    • /index.php
      <?php
      
      include_once "controller/User.php";
      
      $u = new \controller\User();
      $u->index();
      

在这里插入图片描述

六、命名空间引入

  1. 命名空间引入,就是将另外一个空间的元素(类、函数和常量)引入到当前空间来,当作当前空间的元素访问,从而可以减少复杂的完全限定名称访问,取而代之的是非限定名称访问。
  2. use进行空间包含时,默认是从全局空间开始构建空间路径。
  3. 空间引入的元素默认是类,如果要引入其他元素,就必须使用响应关键字:functionconst
  4. 如果引入空间元素与本空间元素重名,使用as关键字。
  5. 引入的多种情况
    • 引入一个空间中的多个同种(类、函数、常量)元素,可以使用,分隔。
    • 引入一个空间中的不同种元素,使用use space\{Human, function show as my_show, const P};
    • 引入一个空间中的所有元素,直接引入空间use space;,但是会被当做子空间,使用元素时需要使用限定名称访问(不常使用,不方便)。
<?php

namespace space1;
class Man {
    public function __construct() {
        echo __METHOD__;
    }
}
function show() {
    echo __METHOD__;
}
const P = 3;


namespace space2;
// 引入空间元素
use space1\Man;
// 引入函数
use function space1\show as my_show;
// 引入常量
use const space1\P;

$man = new Man();
my_show();
echo P;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在uniapp 中使用Ucharts 进行可视化图表开发,折线统计图。

首先我们得 在uniapp 插件市场中找到Ucharts 这款插件&#xff0c;我这里是使用uni_modules导入这款插件案例1:我们这时可以在页面中使用组件的方式进行使用<qiun-data-charts type"area" :chartData"chartData" :opts"opts"/>Js逻辑的代…

基于vue考研助手网站

可定制框架:ssm/Springboot/vue/python/PHP/小程序/安卓均可开发目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可行性 6 3.1.3运行可行性 6 …

我的 System Verilog 学习记录(3)

引言 本文简单介绍 System Verilog 语言的 TestBench。 前文链接&#xff1a; 我的 System Verilog 学习记录&#xff08;1&#xff09; 我的 System Verilog 学习记录&#xff08;2&#xff09; testbench 的目的何在 &#xff1f; testbench 可以让我们通过仿真验证设计…

Qt 工程 pro文件

工作中&#xff0c;感觉pro文件的有些内容真不太懂&#xff0c;现系统性的学习一下。于此备录&#xff0c;分享共勉。 为了更好的理解&#xff0c;先创建一个简单的工程作为实践。 【1】创建一个pro文件 1.1 新建proDemo工程。步骤如下&#xff1a;Qt Creator--->New Pro…

数据结构初阶——时间复杂度与空间复杂度

时间复杂度与空间复杂度1. 算法效率1.1 如何衡量一个算法的好坏1.2算法的复杂度2.时间复杂度2.1 时间复杂度的概念2.2 大O的渐进表示法2.3常见时间复杂度计算举例实列1&#xff1a;实列2&#xff1a;实列3&#xff1a;实列4&#xff1a;实列5&#xff1a;实列6&#xff1a;实列…

k8s service的底层实现

承接上文同一个node中pod之间如何通信&#xff1f;当前的集群中给2个apache pod注册了一个service&#xff0c;这个地址是10.152.183.151&#xff0c;在ubuntu的pod中测试这个ip是可以通信的&#xff0c;it work来源于本机的pod&#xff0c;多访问几次发现会随机的把请求定向到…

远程控制详细教程,同时支持手机控制

​“我需要一些帮助&#xff0c;目前我因为休假旅游去了&#xff0c;需要临时远程办公。我工作的电脑运行的是Windows 10系统&#xff0c;我如何操作才能远程控制公司的电脑进行远程办公&#xff1f;我之前没用过远程控制相关的工具&#xff0c;什么简单的方法可以远程控制另一…

别只会搜日志了,求你懂点检索原理吧

别只会搜日志了&#xff0c;求你懂点检索原理吧 本篇主要内容如下&#xff1a; 前言 项目中我们总是用 Kibana 界面来搜索测试或生产环境下的日志&#xff0c;来看下有没有异常信息。Kibana 就是 我们常说的 ELK 中的 K。 Kibana 界面如下图所示&#xff1a; 但这些日志检索…

内网渗透(五十一)之域控安全和跨域攻击-跨域攻击介绍

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

软件测试面试题 —— 整理与解析(1)

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;&#x1f30e;【Austin_zhai】&#x1f30f; &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xf…

数据库浅谈之向量化

数据库浅谈之向量化 HELLO&#xff0c;各位博友好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 这里是数据库浅谈系列&#xff0c;收录在专栏 DATABASE 中 &#x1f61c;&#x1f61c;&#x1f61c; 本系列阿呆将记录一些数据库领域相关的知识 &#x1f3…

Zabbix“专家坐诊”第182期问答汇总

问题一&#xff1a; Q&#xff1a;像烽火、浪潮这种没有ilo的设备怎么监控他们的硬件状态呢&#xff1f; A&#xff1a;如果没有ilo&#xff0c;可以使用其他硬件监控软件&#xff0c;例如HP Insight Manager、IBM Director、Dell OpenManage等。这些软件可以帮助您监控硬件状…

[神经网络]基干网络之ResNet、MobileNet

一、ResNet ①特点 ResNet的深度远比之前的算法深&#xff0c;且不会出现网络退化问题。 Ps.网络退化&#xff1a;网络深度增加反而不如原来的网络。(网络退化 ! 过拟合/梯度消失) ②残差块 残差块采用短路连接(Shortcut Connection) / 跳跃连接&#xff0c;拟合的目标由直接最…

2023年2月初某企业网络工程师面试题【建议收藏】

拓扑图如下&#xff0c;主机A与主机B能互相通信&#xff0c;但是A不能ping通RA的F0接口&#xff0c;这是为什么&#xff1f;RA上f0接口上配置了ACL&#xff0c;禁止源ip为主机A&#xff0c;目的ip为RA f0的数据包的发送&#xff1b; 第一个路由器上只有到主机B网段的路由&#…

MFCCA多通道多说话人语音识别模型上线魔搭(ModelScope)

实验室研发的基于多帧跨通道注意力机制&#xff08;MFCCA&#xff09;的多说话人语音识别模型近日上线魔搭&#xff08;ModelScope&#xff09;社区&#xff0c;该模型在AliMeeting会议数据集上获得当前最优性能。欢迎大家下载。开发者可以基于此模型进一步利用ModelScope的微调…

【Python】文本转语音库pyttsx3

一、语音输出 1、安装文本转换语音库pyttsx3 安装指令&#xff1a; pip install pyttsx3 2、导入pyttsx3库后&#xff0c;调用speak函数即可进行语音播放。 import pyttsx3 #语音播放 pyttsx3.speak("How are you?") pyttsx3.speak("I am fine, thank yo…

成都欢蓬电商:抖音直播卖药灰度测试通告

据报道&#xff0c;近日有MCN机构透露&#xff0c;目前抖音直播卖药为“测试项目&#xff0c;谨慎试跑中”; “仍处于灰度测试&#xff0c;至于测试多久&#xff0c;抖音官方确实没有答复&#xff0c;需要看第一阶段数据&#xff0c;然后定夺&#xff0c;预计4月份会纳入更多机…

第八章《嵌入式系统原理与实践》--沈建华 王慈 清华大学出版社 课后部分习题个人答案

第八章 1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;6&#xff0c;7&#xff0c;9&#xff0c;12 1 什么是串行通信、并行通信&#xff1f; 按一次传输数据位个数区分 串行通信并行通信是数据是一位一位地由端口发送或接收数据的各个数据位&#xff08;一般为 8 位…

「TCG 规范解读」初识 TPM 2.0 库续二

可信计算组织&#xff08;Ttrusted Computing Group,TCG&#xff09;是一个非盈利的工业标准组织&#xff0c;它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立&#xff0c;并采纳了由可信计算平台联盟&#xff08;the Trusted Computing Platform Alli…

手写一个文件上传demo

背景 最近闲来无事&#xff0c;同事闻了一下上传文件的基本操作&#xff0c;如何用文件流来实现一个文件的上传功能 基本概念 流&#xff08;Stream&#xff09;是指在计算机的输入输出操作中各部件之间的数据流动。可以按照数据传输的方向&#xff0c;将流可分为输入流和输出…