【问题标题】:how do you cast from a const string namespace你如何从 const 字符串命名空间转换
【发布时间】:2018-07-22 16:08:34
【问题描述】:

我试图找出一种方法来轻松转换动态创建的对象,这样我就可以在我的 IDE 中看到它的属性和公开的方法。当字符串包含完全限定的命名空间时,它似乎表现得很奇怪。

我是否可以从抽象类中的 const 字符串转换对象??

abstract class Models
{
    const MODEL = "foo\\bar\\Model";
}


//OK
    $p1 = "foo\\bar\\Model";
    $p2 = new $p1; 

//FAILS

    //$wannaDoThis = (Models::MODEL) Generator::generate(Models::MODEL);


    //$str1 = Models::MODEL;
    //$str2 = (string) Models::MODEL;
    //$o1 = new Models::MODEL;
    //$o2 = new "".Models::MODEL;
    //$o3 = new (Models::MODEL);

【问题讨论】:

    标签: php casting constants abstract


    【解决方案1】:

    这应该可行:

    <?php
    
    namespace foo\bar;
    
    class Model
    {
    }
    
    namespace SomeOtherNamespace;
    
    abstract class Models
    {
        const MODEL = "foo\\bar\\Model";
    }
    
    $class = Models::MODEL;
    $x = new $class();
    var_dump($x);
    

    你可以在这里看到https://3v4l.org/87sKs

    【讨论】:

    • 我知道这一点,但我不想实例化这个类,我想像这样转换一个实例:$wannaDoThis = (Models::MODEL) Generator::generate(Models ::型号);
    • 那么这应该工作。 $wannaDoThis = Generator::generate(Models::MODEL);前面你打的演员表不存在,这更像是Java!
    • 效果很好,但对我没有帮助......这样我的 IDE 可以在我动态创建的模型上公开函数和属性,但我想这是不可能的 :(
    • 抱歉,朋友,这不可能
    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    相关资源
    最近更新 更多