学习web的第六天

一、PHP的命名空间
1,存在意义(解决什么问题):
一个文件存在多个类,可能出现重名,而且在一个项目中,我们可能除了自己写代码,还会使用GitHub中的第三方开源代码。
2,子命名空间:
与目录和文件的关系很像,PHP 命名空间也允许指定层次化的命名空间的名称。因此,命名空间的名字可以使用分层次的方式定义:App\User

<?php
namespace APP
{
    class User{
    public static function make()
    {
        return __METHOD__;
    }
}
}
?>
<?php
include 'App\User.php';
echo App\User::make();

在这里插入图片描述
3,引入方法:
非限定和限定相当于相对路径,而完全限定引入相当于绝对路径。
1)非限定引入:

<?php
namespace APP
{
    class User{
    public static function make()
    {
        echo __METHOD__;
    }
}
User ::make();
}
?>

这里面的User ::make();就是非限定引入
2)限定引入:

<?php
namespace APP;
include 'Order.php';
class User{
    public static function make()
    {
        echo __METHOD__;
    }
}
Controller\Order::make();

<?php
namespace APP\Controller
{
    class Order{
    public static function make()
    {
        echo __METHOD__;
    }
}
}
?>

这里的Controller\Order::make();就是限定引入
3)完全限定引入:

<?php
namespace APP;
include 'Commont.php';
class User{
    public static function make()
    {
        echo __METHOD__;
    }
}
\Commont\Commont::make();

<?php
namespace Commont
{
class Commont{
    public static function make()
    {
        echo __METHOD__;
    }
}
}
?>

这里的\Commont\Commont::make();就是完全限定引入

注意:在命名空间中定义常量时,用const定义时,定义出来的常量不是全局的,而用define定义的则是全局的。如果出现引入冲突:例如:出现两个命名空间为:App\Module\Shop\Controller\User和App\Module\Shop\Serverr\User就会发生冲突,这个时候可以使用as起一个别名App\Module\Shop\Serverr\User as UserServer,这样就可以使用了。

一些路径和调用的注意:

<?php
namespace A;
use B\D, C\E as F;
// 函数调用
foo();      // 首先尝试调用定义在命名空间"A"中的函数foo()
            // 再尝试调用全局函数 "foo"
\foo();     // 调用全局空间函数 "foo" 
my\foo();   // 调用定义在命名空间"A\my"中函数 "foo" 
F();        // 首先尝试调用定义在命名空间"A"中的函数 "F" 
            // 再尝试调用全局函数 "F"
// 类引用
new B();    // 创建命名空间 "A" 中定义的类 "B" 的一个对象
            // 如果未找到,则尝试自动装载类 "A\B"
new D();    // 使用导入规则,创建命名空间 "B" 中定义的类 "D" 的一个对象
            // 如果未找到,则尝试自动装载类 "B\D"
new F();    // 使用导入规则,创建命名空间 "C" 中定义的类 "E" 的一个对象
            // 如果未找到,则尝试自动装载类 "C\E"
new \B();   // 创建定义在全局空间中的类 "B" 的一个对象
            // 如果未发现,则尝试自动装载类 "B"
new \D();   // 创建定义在全局空间中的类 "D" 的一个对象
            // 如果未发现,则尝试自动装载类 "D"
new \F();   // 创建定义在全局空间中的类 "F" 的一个对象
            // 如果未发现,则尝试自动装载类 "F"
// 调用另一个命名空间中的静态方法或命名空间函数
B\foo();    // 调用命名空间 "A\B" 中函数 "foo"
B::foo();   // 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法
            // 如果未找到类 "A\B" ,则尝试自动装载类 "A\B"
D::foo();   // 使用导入规则,调用命名空间 "B" 中定义的类 "D" 的 "foo" 方法
            // 如果类 "B\D" 未找到,则尝试自动装载类 "B\D"
\B\foo();   // 调用命名空间 "B" 中的函数 "foo" 
\B::foo();  // 调用全局空间中的类 "B" 的 "foo" 方法
            // 如果类 "B" 未找到,则尝试自动装载类 "B"
// 当前命名空间中的静态方法或函数
A\B::foo();   // 调用命名空间 "A\A" 中定义的类 "B" 的 "foo" 方法
              // 如果类 "A\A\B" 未找到,则尝试自动装载类 "A\A\B"
\A\B::foo();  // 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法
              // 如果类 "A\B" 未找到,则尝试自动装载类 "A\B"
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值