【问题标题】:How to create a new object using a class-name stored in a variable? [duplicate]如何使用存储在变量中的类名创建新对象? [复制]
【发布时间】:2013-12-13 07:08:59
【问题描述】:

我有一堆函数取决于一个变量,我希望能够做这样的事情:
(它返回一个错误,因此我无法解决这个问题)

function($x) {
    fetch.$x.() // if x=Name I would like it to execute fetchName()...and so on 
}

类似的东西

function($x) {
    $article = new \Cc\WebBundle\Entity\$X(); 
    // if x='name' to be executed Cc\WebBundle\Entity\name()
}

【问题讨论】:

    标签: php


    【解决方案1】:

    当然,你可以这样做:

    $basename = "fetch";
    $key = ...; // your logic for generating the rest of function's name
    
    $functionName = $basename . $key;
    $functionName(); // execute function
    

    现在,棘手的部分是函数是否包含任意参数集。在这种情况下,您应该使用call_user_func_array (docs)。

    至于对象的创建,meagar这里解释清楚如何实现。

    附:这实际上与Symfony2 关系不大。这是一个纯粹的PHP 问题;)

    【讨论】:

    • 谢谢。经过反复试验,完美地为我节省了数百行代码。 Ps:symfony2 ...这只是上下文
    【解决方案2】:

    就个人而言,我使用方便的call_user_func_array() 函数如下:

    <?php
    
    $class = 'MyClassName';
    $method = 'someMethod';
    $parameters = array('foo', 'bar', 'baz');
    
    call_user_func_array(array($class, $method), $parameters);
    

    我想你需要在任何名称间隔的类名中转义反斜杠,即MCB\\MyClassName

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2013-11-26
      • 1970-01-01
      相关资源
      最近更新 更多