命名空间应用|学习笔记

简介: 快速学习命名空间应用,根据实际的开发需求,设定合适的命名空间进行管理

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第三阶段命名空间应用】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/713/detail/12726


命名空间应用


内容简介:

一、命名空间的概念

二、应用步骤

三、具体示例

四、代码说明

五、小结


一、概念

1.命名空间应用:

模拟真实的开发环境,运用命名空间的规则

2.命名空间分层

一般是文件夹进行分层(建议使用与文件夹同名空间名) 这样主要是为了方便后期的自动寻找类

3.文件夹的分层

是根据业务的需求和项目开发所选的复杂程度来设计(有的项目只有一个页面就写在一个文件夹里,有的项目有多个功能就写在多个文件夹里,有的项目包含思想层面的架构,文件夹层级更深,更复杂)


二、步骤

1.确定项目开发的复杂程度

2.实现问价分层管理布局

(按照业务不同进行分层,按照设计的层次进行文件夹分层)

3.针对文件分层进性命名空间的使用

(一个文件只属于一个空间),一个文件里面只会定义一个命名空间


三、示例

1.创建文件夹:模拟项目不同文件 PHP 文件放到不同文件夹下,根据下面内容在 web 下面新建文件夹:

--|root                 ------根目录

--|--|controller          ------业务模块

--|--|model             ------数据模块

--|--|core              -------核心工具

2.业务说明

(1)Root 根目录,存放用户可以直接访问的文件,文件都是请求 controller 里的文件(Root可不用空间)

(2)Controller目录,存放业务逻辑文件,所有业务都是类文件,业务要操作数据库,请求 model里的文件,属于 controller 空间

(3)Model 目录,存放数据库操作的类文件,一张表一个类文件,属于 model 空间

(4)Core 目录,核心工具的存放,属于 core 空间

3.示例步骤

创建3个文件:分别代表 root 目录下(不需要空间),controller 目录下,controller 空间,model 目录下的 model 空间。

首先,在root目录下创建一个文件,参考内容如下:

<?phy

# root 目录下:index.php

# 啥都不用做,直接包含 controller 文件

Include_once  ‘controller/user.phy’;

接下来,在 controller 内创建对应的文件夹

然后,新建一个 core目录,命名 DB.Php,参考内容如下:

<?php

#核心文件

# root/core 目录下:DB.php

Namespace core;

Class DB{

Private $link

Public function_contruct(){

#数据库初始化

}

#简单效果:查询全部数据

Public function getALL(¥sql){

Reture’数据查询结果<br>’;

} //这一步是为了实现数据库的操作

模型下面需要做业务,这里就会用到包含空间,model文件。调用 core 下方的 DB,参考内容如下:

<?php

# root/model 目录下:User.php:操作用户数据表

Namespace model;

# 加载DB类

Include_once ‘_D:/server/web/root/core/DB.php’;  # 建议使用绝对路径:../和./都会因为嵌套包含而错误

Class User{

Public function getALLUsers(){

#假设数据库链接、数据库、表都已经存在

$sql = “select * from user”;

#调用更高级的操作类实现SQL执行并返回结果:DB属于core 空间,使用完全限定名称访问

$db = new\core\DB();

Return$db->getALL($sql);

}

在 controller 下也包含一个User php 文件,参考内容如下:

<?php

# root/controller 目录下:user.php

Namespace controller;

Class user{

Public function_display(){

#调用模型目录下的 user 类实现数据库的操作:使用完全限定名称访问

Include_once ‘_D:/server/web/root/model/user/php’;  # 建议使用绝对路径:../和./都会因为嵌套包含而错误

$u = new\model\user();

$user = $u->getALLUsers();

Var_dump($users);

}

//在操作数据的时候,需要访问model下面的user,通过u->getALL方法(getALLUsers)访问,调用核心DB里的getALL


四、代码说明

1.index.php 在 root 目录下,没有定义空间,内部元素属于全局空间:index.php 包含了子目录 controller 下的 users.php,而 users 类属于 controller空间,所以在 index.php 中访问users 类的使用,可以使用限定名称(全局空间的子空间 controller\空间元素),或者完全限定名称(\子空间\空间元素)

2.Controller/user.php 在 root/controller 文件夹下,定义了空间 controller ,所以文件里面所有的访问,默认都是在 controller 下找。Controller/user 类用到了 model、user 类,所以需要使用完全限定名称访问(同级别不同空间)\model\user

3.Model/user.php 在 root/model 文件夹下,定义了空间 model,所以文件里所有的访问,默认都是在model下找。Model/user 类中用到了 core/DB 类,所以需要使用完全限定名称访问\core\DB

4.Core/db.class.php 在 root/core 文件夹下,定义了空间 core

最后查询运行结果,成功运行,如下图:

image.png//拥有命名空间的参与,就要用到命名空间的访问方式

可以根据文件的目录,来定义它的命名空间

在后续的自动加载中,涉及到的命名空间需要调整,因为系统在访问类的时候,是通过空间进行访问的。


五、小结

1.空间的实际应用是以文件为单位定义空间的

(不绝对,有的应用是不需要以文件为单位。可通过自身的逻辑来定义)

2.空间的划分是按照业务对应的脚本进行划分的

如业务controller,数据model之类

3.文件的包含与空间的包含没有联系

(文件的包含是通过是否可以找到,而空间的包含是指内存里虚拟的内容),二者是独立的:文件是在加载文件是,而空间实在进入内存后(应用同名,会具有相似性)

4.空间的应用

通常是采用非限定名称(自己空间里)和完全限定名称访问(其他空间),实际上建议将完全限定名称转化为非限定名称

相关文章
|
6月前
|
C++
【C++ 命名空间】C++ 命名空间与嵌套命名空间入门指南
【C++ 命名空间】C++ 命名空间与嵌套命名空间入门指南
114 0
|
6月前
|
域名解析 程序员 C++
C++命名空间
`C++`中的命名空间用于分割全局作用域,减少命名冲突。定义命名空间如`namespace expression {...}`,可使用`using`运算符或`using namespace`指令引用。案例展示如何在命名空间`Person`内定义变量和函数。注意:命名应具描述性,头文件中命名空间放预处理指令后,避免全局变量和过度使用`using`。命名冲突时可设命名空间别名。
33 2
|
6月前
|
编译器 C++
C++入门(命名空间)
C++入门(命名空间)
|
6月前
|
程序员 编译器 C语言
【C++】命名空间
【C++】命名空间
35 3
|
6月前
|
C++
【c++】命名空间
【c++】命名空间
【c++】命名空间
|
6月前
|
C++
C++命名空间详解
C++命名空间详解
39 0
|
6月前
|
C++
64命名空间
64命名空间
31 0
C++(命名空间的使用小结)
C++(命名空间的使用小结)
|
PHP 开发者
命名空间总结|学习笔记
快速学习命名空间总结
命名空间总结|学习笔记