• 一些类和对象问题的探索,简单易懂的命名空间及use的使用


    1、关于namespace和use
      允许通过别名引用或导入外部的完全限定名称,是命名空间的一个重要特征。所有支持命名空间的PHP版本支持三种别名或导入方式:为类名称使用别名、为接口使用别名或为命名空间名称使用别名。PHP 5.6开始允许导入函数或常量或者为它们设置别名。别名是通过操作符 use 来实现的

      最近一段时间在研究php框架,一直想的什么时候才能开发出自己的框架,当然这是为了提升自己的编程水平,同时能把平时学的零散的东西糅合在一块熟练应用。但是开发一个框架根本不知道如何做起,先开发什么,虽然php的框架也不少,但是都是如何应用,没有文档和视频可以学习,这是让我特别郁闷的事情,相信不少想自己开发框架玩的小伙伴都有类似的感受,郁闷归郁闷,自己还是动手做了,做的时候困难和想象的一样难,从一开始就有点蒙了。

      那就是命名空间的使用及use引入。看了很多网上的说法,也看了官方文档,意思大概明白,也很好理解,命名空间还好说,给这个空间起个名字嘛,但是use具体操作起来就不行 了,怎么也搞不通。后来看一个yii学习视频才恍然明白。

      比方说建三个文件。

      第一个文件 A.php,里边有两个类,命名空间是 ac;

    <?php
    namespace ac;

    class Apply{
      function get_info(){
        echo 'this is A Apply';
      }
    }

    class C{
      function info(){
        echo 'this is info';
      }
    }

     

      第二个文件 B.php  命名空间 ad;

    <?php
    namespace ad;

    class Apply{
      function get_info(){
        echo 'this is B Apply';
      }
    }

      第三个文件 index.php ,用来使用上边两个文件的类。

      比方说我们现在想实例化A.php里的类,该怎么实现呢?

    首先要包含这个文件 require_once('A.php');

      然后 use ac;? 还是acA?   起初我也是这么认为的。其实这是错的,use应该是这样的,命名空间这个空间下你要实例化类的类名比方说我们要实例化 A.php里的Apply类,那么 use acApply;  这就相当于引入这个类,接下来再  new Apply();调用里边的方法,跟平常是一样的。如果要实例化类C,就 use acC;

      注意:use不等于require_once或者include,use的前提是已经把文件包含进当前文件。

    顺便提一句,在MVC模式中,类名和文件名是相同的,所以use的时候会让不了解的人以为use后面跟的是文件名,我之前就这么以为的。其实use的还是类名。

      有的人可能问了,那我不同的命名空间下,有相同的类名,在同一个文件中使用怎么办?比方说我们上边的index.php,把A.php和B.php都包含进来,然后new Apply();这个时候是会报错的,解决方案就是起别名,比方说 use adApply as b;  此时我们new 的时候不应该写成 new Apply();而是new b();这样就不会发生冲突了。

     

    2、const和define都是用来声明常量的(它们的区别不详述),但是在命名空间里,define的作用是全局的,而const则作用于当前空间

  • 相关阅读:
    Java子类和父类之间方法和属性关系
    静态链接库与动态链接库
    两人相遇问题时间段
    try catch finally
    shell判断条件参数过多
    python C++ Java 文件数据库等流操作,当打开后必须关闭
    CSS3 target 伪类不得不说那些事儿(纯CSS实现tab切换)
    清浮动方法
    this函数的理解
    css3 tranform  transition animation
  • 原文地址:https://www.cnblogs.com/easyTrue/p/8067978.html
Copyright © 2020-2023  润新知