我是靠谱客的博主 神勇烧鹅,最近开发中收集的这篇文章主要介绍无限套娃,namesapce的命名之路,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

学完namespace,顺手来个命名空间的小总结。

1.命名空间的使用目的

PHP函数常量是不允许同名的。为了解决这三者的同名问题,所以出现了命名空间,故而命名空间只影响类、函数、常量(const)。

2.命名空间的使用格式

a.可以命名一个空间

 <?php
namespace space1;//namespace关键字+空间名 
代码;
 ?>
登录后复制

b.也可以同时命名多个空间

<?php
namespace space1;//namespace关键字 +空间名 
代码1;
namespace space2;
代码2;
namespace space3;
代码3;
.......//代码1,代码2,代码3,可相同亦可不同
.......
 ?>
登录后复制

注意事项:如果一个php文件中,第一个空间的定义义必须放在第1行。不过凡事都有例外,在声明命名空间之前还有唯一合法的代码是用于定义源文件编码方式的 declare 语句。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。例如下面的代码会报错。

<html>
<?php
namespace space1;
namespace space2;
?>
</html>
登录后复制

3.命名空间的访问

命名空间的访问分为:非限定空间访问限定空间访问完全限定空间访问

a.非限定空间访问

<?php
namespace space3;
   function f1(){
   echo "space3";
   }
namespace space3space2;//其中""代表space2是space3的子空间,同理space3是space2的父空间。
   function f1(){
     echo "space2";
     }
namespace space3space2space1;
   function f1(){
     echo "space1";
     }
   f1();//对上面空间成员进行访问,输出结果为:space1
?>
登录后复制

b.限定空间访问

<?php
namespace space2space1;
    function f1(){
     echo "space1";
      }
namespace space2;
function f1(){
     echo "space2";
      }
   f1();//此时输出的是 space2
   space1f1();//此时输出的是space1
?>
登录后复制

c.完全限定空间访问

<?php
namespace space3;
   function f1(){
   echo "space3";
   }
namespace space2;
      function f1(){
     echo "space2";
     }
namespace space1;
     function f1(){
     echo "space1";
     }
   f1();//对上面空间成员进行访问,输出结果为:space1
   space3f1();//对space3进行访问,输出结果为:space3
   space2f1();//对space2进行访问,输出结果为:space2
?>
登录后复制

4.引入空间成员

a.use 空间名空间名 【as 别名】:将指定空间引入到当前空间。同可以使用as关键字为被引入的空间起个别名

b.use 空间名空间名成员类 【as 别名】:将指定的空间中的成员引入到当前空间,引入空间成员只能引入类

5.一些小情况

一旦命名空间出现,那么空间元素(类、常量、函数)的访问就被限定在空间内,如果使用非限定空间访问,系统会出现以下解析逻辑(限定名称或完全限定名称是直接按照路径准确查找)

  • 首先在自己空间内查找

  • 其次在如果找不到元素,不同空间元素的处理方式不同

系统常量,系统函数如果找不到,会全局空间去找

系统类是不会自动去全局空间去找的(报错,提示空间找不到)

<?php
namespace space3;
   function f1(){
   echo "space3";
   }
//当前所有访问如果使用非限定名称都代表访问当前空间内的元素
f1();//访问space3下f1()函数
//想要访问函数
define('PI',3.14);//space3下没有define()函数,全局函数有
//想要访问系统常量
echo PHP_VERSION; //space3下没有define()函数,全局函数有


//想要访问类

//错误方案
//$m=new Mysqli('localhost','root','root');//系统会提示类不存在

//正确方案
$m= new Mysqli('localhost','root','root');

?>
登录后复制

推荐 :php教程

以上就是无限套娃,namesapce的命名之路的详细内容,更多请关注靠谱客其它相关文章!

最后

以上就是神勇烧鹅为你收集整理的无限套娃,namesapce的命名之路的全部内容,希望文章能够帮你解决无限套娃,namesapce的命名之路所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部