PHP 命名空间使用--规约探索

博客围绕PHP中namespace有无的区别展开。以Application.php为例,分析引用含命名空间类报错的原因,指出需按逻辑路径访问。介绍了三种修改bug的方法,还探讨了use的使用及类完整逻辑路径的情况,强调使用命名空间要注意引用和被引用脚本的命名空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

探索一:namespace 有无的区别:

假设:在一个Application.php 中定义一个class Application, 且申明命名空间,如下:

 

<?php
namespace app;

class Application
{

    protected function getClass()
    {
        return __CLASS__.PHP_EOL;
    }

}

然后在测试文件中使用它:

<?php

require '../app/Application.php';

new Application();

 

 

然后就报错了,报错的大概意思就是并没有在测试文件中找到该类

 

呃?!!! 为啥,我明明引用了Application.php啊~

 

侦探分析时刻:

首先是官方文档解释:

 

首先需要认清命名空间的作用,就是给文件的属性上添加一个在逻辑上(php中)的位置路径,而不限于物理路径上,而demo中为什么报错,是因为Application.php中已经声明了命名空间,那么就需要按照就要使用其给定的逻辑路径去访问class Application了,而不再是简单的new Application,当然访问的前提还是需要引入该文件,不同的是,需要使用类(这里是特指类,还包括方法、常量等也可以)的逻辑路径去使用它。

那么如何修改bug呢?方法有三:

一:

在demo文件中,声明命名空间,且需要class Application所 声明的命名空间相同,在同一个逻辑路径下,就可以通过相对逻辑路径进行对class Application的访问了,如下:

 

 

<?php
namespace app;

require '../app/Application.php';

new Application();

 

二:

使用use,申明要使用文件的逻辑路径;

 

 

<?php
use app\Application;

require '../app/Application.php';

new Application();

 

三:

使用逻辑路径去调用类

 

<?php

require '../app/Application.php';

new app\Application();

那么针对,如果我不use文件完整的逻辑路径,而只是use逻辑路径的相当于目录部分的路劲,又会怎么样?

即:

 

 

<?php

use app\*;

php似乎还不支持的,

以下是关于use的介绍:

 

 

对于我们在demo中调用的class Application,其完整的逻辑路径又是如何?

有下面三种情况

 

 

<?php

require '../app/Application.php';

new app\Application();

使用OK,Application完整的逻辑路径应该为\app\Application,为什么呢?再看。

 

<?php

require '../app/Application.php';

new \app\Application();

 

这两种都没有报错,因为Application完整的逻辑路径确实为\app\Application,那么为什么第一种情况也可以呢,因为demo中并没有声明命名空间,默认为'\',第一种情况可以解释为在demo所在的命名空间下利用相对逻辑路径调用Application,所以Application完整的逻辑路径确实为\app\Application,

因此这种情况就会报错:

<?php
namespace web;

require '../app/Application.php';

new app\Application();

 

 

因为此时Application的完整逻辑路径成为了 \web\app\Application

 

官方解释如下:

 

故:在使用命名空间的时候,需要注意引用脚本的命名空间和被引用脚本的命名空间,从而使用先对逻辑路径或者绝对路径

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值