PHP namespace(一)

本文介绍了PHP中命名空间的概念,包括函数、类及常量在不同命名空间中的作用范围。通过实例展示了如何在不同的命名空间中调用函数和类,以及常量在命名空间中的特性。

命名空间的作用域

1.函数的namespace

  • 各自命名空间调用各自命名空间的函数
<?php

namespace a
{
    function hello()
    {
        return '命名空间' . __NAMESPACE__ . '<br>函数名称是:' . __FUNCTION__;
    }
}

namespace b
{
    function hello()
    {
        return '命名空间' . __NAMESPACE__ . '<br>函数名称是:' . __FUNCTION__;
    }
}

namespace
{
    echo a\hello();     //调用a空间中的hello
    echo '<hr>';
    echo b\hello();     //调用b空间中的hello
}

?>

运行的结果

这里写图片描述

  • 还可以在b的命名空间中调用a命名空间中的函数
<?php

namespace a
{
    function hello()
    {
        return '命名空间' . __NAMESPACE__ . '<br>函数名称是:' . __FUNCTION__;
    }
}

namespace b
{
    function hello()
    {
        return \a\hello();
    }
}

namespace
{
    echo a\hello();     //调用a空间中的hello
    echo '<hr>';
    echo b\hello();     //b调用a空间中的hello
}



?>

运行结果

这里写图片描述

2.类的命名空间

  • 各自命名空间调用各自命名空间的函数
<?php

namespace a
{
    class A
    {
        public $name = 'mohuani';
        public function say()
        {
            $namespace = '命名空间:' . __NAMESPACE__;
            $className = '类名' . __CLASS__;
            $methodName = '方法名' . __METHOD__;
            return $namespace . '<br>' . $className . '<br>' . $methodName . '<br>' . $this->name;
        }
    }
}



namespace b
{
    class A
    {
        public $name = 'mohuani';
        public function say()
        {
            $namespace = '命名空间:' . __NAMESPACE__;
            $className = '类名' . __CLASS__;
            $methodName = '方法名' . __METHOD__;
            return $namespace . '<br>' . $className . '<br>' . $methodName . '<br>' . $this->name;
        }
    }
}

namespace
{
    echo (new a\A)->say();
    echo '<hr>';
    echo (new b\A)->say();
}



?>

运行结果

这里写图片描述

  • 在b的空间中调用a空间中的类
<?php

namespace a
{
    class A
    {
        public $name = '陌花拟';
        public function say()
        {
            $namespace = '命名空间:' . __NAMESPACE__;
            $className = '类名' . __CLASS__;
            $methodName = '方法名' . __METHOD__;
            return $namespace . '<br>' . $className . '<br>' . $methodName . '<br>' . $this->name;
        }
    }
}



namespace b
{
    class A
    {
        public $name = 'mohuani';
        public function say()
        {
            $namespace = '命名空间:' . __NAMESPACE__;
            $className = '类名' . __CLASS__;
            $methodName = '方法名' . __METHOD__;
            $temp = (new \a\A)->name;
            return $namespace . '<br>' . $className . '<br>' . $methodName . '<br>' . $temp;
        }
    }
}

namespace
{
    echo (new a\A)->say();
    echo '<hr>';
    echo (new b\A)->say();
}



?>

运行结果

这里写图片描述

3.常量的命名空间

  • const创建的常量,受命名空间的限制
  • define创建的常量,不受命名空间的限制
<?php

namespace a
{
    const SITE_NAME = '陌花拟';
    //define('SITE_NAME','陌花拟')
    //define创建的常量,不收命名空间的限制
}


namespace b
{
    const SITE_NAME = 'mohuani';
}

namespace
{
    echo a\SITE_NAME;
    echo '<hr>';
    echo b\SITE_NAME;
}


?>

运行结果

这里写图片描述

### PHP Namespace 使用指南和示例 PHP 中的 `namespace`(命名空间)用于解决类、函数和常量名称冲突的问题,同时还可以让代码更加模块化和易于维护。以下是关于 PHP 命名空间的详细说明和使用示例。 #### 1. 定义命名空间 在 PHP 中,可以通过 `namespace` 关键字定义个命名空间。命名空间可以嵌套,并且支持多层结构。例如: ```php <?php namespace userCenter; class User { public function __construct() { echo "User class in userCenter namespace"; } } ?> ``` 当需要定义多个命名空间时,可以使用花括号 `{}` 将代码块包裹起来[^1]: ```php <?php namespace userCenter\register { class Register { public function __construct() { echo "Register class in userCenter\register namespace"; } } } namespace userCenter\login { class Login { public function __construct() { echo "Login class in userCenter\login namespace"; } } } ?> ``` #### 2. 使用 `use` 引入命名空间 为了简化对其他命名空间中类的引用,可以使用 `use` 关键字引入命名空间。以下是个简单的例子: ```php <?php namespace test\dog; class Dog { public function __construct() { echo "Dog class in test\dog namespace"; } } namespace test\cat; use test\dog\Dog; // 引入 test\dog 命名空间中的 Dog 类 class Cat { public function interactWithDog() { $dog = new Dog(); // 直接实例化 Dog 类 } } ?> ``` 需要注意的是,`use` 只是为当前文件提供了个别名或快捷方式,实际的类名仍然包含完整的命名空间路径[^3]。 #### 3. 命名空间中的类冲突解决 如果两个命名空间中存在同名类,可以通过 `use` 和别名来解决冲突。例如: ```php <?php namespace one { class Person { public function __construct() { echo "I am one!"; } } } namespace test { class Person { public function __construct() { echo "I am test!"; } } } namespace main { use one\Person as OnePerson; use test\Person as TestPerson; $onePerson = new OnePerson(); // 输出 "I am one!" $testPerson = new TestPerson(); // 输出 "I am test!" } ?> ``` #### 4. 全局命名空间的访问 如果需要在命名空间中访问全局命名空间中的类或函数,可以使用前缀 `\`。例如: ```php <?php namespace test; function strlen($str) { return \strlen($str); // 调用全局命名空间中的 strlen 函数 } ?> ``` #### 5. 动态调用命名空间中的类 可以通过字符串动态调用命名空间中的类。例如: ```php <?php $className = 'test\dog\Dog'; $instance = new $className(); // 实例化 test\dog 命名空间中的 Dog 类 ?> ``` ### 示例代码总结 以下是个综合示例,展示了如何定义和使用命名空间: ```php <?php namespace userCenter\register { class Register { public function __construct() { echo "Register class in userCenter\register namespace"; } } } namespace userCenter\login { class Login { public function __construct() { echo "Login class in userCenter\login namespace"; } } } namespace main { use userCenter\register\Register; use userCenter\login\Login; $register = new Register(); // 输出 "Register class in userCenter\register namespace" $login = new Login(); // 输出 "Login class in userCenter\login namespace" } ?> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值