账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    php命名空间问题,为什么f1(); 调用最近的那个空间的函数,他们都在同一个空间?
    39
    0
    <?php
    namespace first;
    function f1(){
        echo 'f1-1';
    }
    namespace second;
    function f1(){
        echo 'f1-2';
    }
    f1();

    //结果为什么输出f1-2, 难道他们都在同一个空间?就近原则?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • ∝粉红豹ョ 普通会员 1楼

      在PHP中,命名空间(namespace)是一种用来组织代码的结构,使得代码在运行时可以根据需要而被分隔和组织。每个命名空间都有一个名字(namespace),可以包含不同的文件和类,每个文件和类都有一个名称(class),在命名空间中定义的类和函数(method)只能在该命名空间中被调用。

      当你使用f1();来调用最近的那个命名空间中的函数时,它们都在同一个命名空间中被调用,这是因为PHP的命名空间是基于类的,而不是基于文件的。每个命名空间都包含一系列的类,每个类都有一个名字,以及一个或多个方法(方法是以public、protected或private结尾的字符串,表示这些方法是公共、保护或私有的)。

      当你调用f1();时,PHP会首先检查当前所在的命名空间,如果该命名空间中有对应的类,那么f1()方法就会被调用。这是因为PHP会根据类名查找对应的类,并调用其中的方法。

      如果你在不同的命名空间中定义了同名的函数,那么调用f1()就会调用它们中的任何一个,而不是根据命名空间顺序调用。例如,如果在my_namespace命名空间中定义了名为f1的函数,那么在my_namespace的文件中,f1()将被调用;而在my_namespace\other_namespace命名空间中定义了另一个名为f1的函数,那么在my_namespace\other_namespace的文件中,f1()将被调用。

      需要注意的是,PHP的命名空间只对当前作用域有效,如果你在函数内部定义了另一个函数,那么它将默认在当前命名空间中被调用,即使这个函数在另一个命名空间中定义了同名的函数。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部