dqingn8836 2013-01-11 13:31
浏览 21
已采纳

在PHP中作为非字符串参数的类

Example in file 1:

namespace A;

class Foo{

}

file 2:

use A\Foo;

do_stuff('A\Foo');  // <- need namespace here :(

Foo::someStaticMethod();  // <- namespace not required :D

Is there any way I can pass class names in function arguments like constants or something, so I don't need to prepend the namespace?

  • 写回答

4条回答 默认 最新

  • dqlhsm9820 2013-01-11 13:34
    关注

    Update :)

    When I know, that I need to pass the classnames of some classes around as string I'm used to create special class constant

    namespace Foo\Bar;
    class A {
        const __NAMESPACE = __NAMESPACE__;
        const __CLASS = __CLASS__;
    }
    

    Now you can reference the classname like

    use Foo\Bar\A as Baz;
    echo Baz::__CLASS;
    

    With PHP5.5 this will be builtin

    echo Baz::class;
    

    Full-Qualified-Names (FQN) for namespaces always starts with a namespace separator

    do_stuff('\A\Foo');
    

    except (and thats the only exception) in use-statements, because there can only appear complete namespace identifiers, so for convenience you can omit it there.

    However, a string is a string and where you use it as a class name is out of scope of the interpreter, so it lost the reference to the former use A\Foo-aliasing. With PHP5.5 you can write Foo::class, but I think thats not an option right now ;)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 请问为什么我配置IPsec后PC1 ping不通 PC2,抓包出来数据包也并没有被加密
  • ¥200 求博主教我搞定neo4j简易问答系统,有偿
  • ¥15 nginx的使用与作用
  • ¥100 关于#VijeoCitect#的问题,如何解决?(标签-ar|关键词-数据类型)
  • ¥15 一个矿井排水监控系统的plc梯形图,求各程序段都是什么意思
  • ¥50 安卓10如何在没有root权限的情况下设置开机自动启动指定app?
  • ¥15 ats2837 spi2从机的代码
  • ¥200 wsl2 vllm qwen1.5部署问题
  • ¥100 有偿求数字经济对经贸的影响机制的一个数学模型,弄不出来已经快要碎掉了
  • ¥15 数学建模数学建模需要