Php 通过在名称之间使用变量使类成为动态的

Php 通过在名称之间使用变量使类成为动态的,php,dynamic-programming,Php,Dynamic Programming,捆绑包中的大多数类都有相同的名称。CRMFirstSecondExternal或CRMSecondThirdExternal等。现在我需要将FirstSecond或SecondThird存储到$variable中,然后在类名之间使用$variable使其成为对该类的正确调用 use Escalon\Bundle\Admin\CRMBundle\Helper\CRMTravelExpenseExternal; private function deletePreviousSchedule( $pa

捆绑包中的大多数类都有相同的名称。CRMFirstSecondExternal或CRMSecondThirdExternal等。现在我需要将FirstSecond或SecondThird存储到$variable中,然后在类名之间使用$variable使其成为对该类的正确调用

use Escalon\Bundle\Admin\CRMBundle\Helper\CRMTravelExpenseExternal;
private function deletePreviousSchedule( $params )
{
    $queryParams = array();
    $em = $this->getDoctrine()->getManager();

    if($params['bundleAndTableName'] == 'EscalonAdminCRMBundle:ClientServiceTe')
    {
        $helper = 'TravelExpense';
    }
    //$helper = preg_replace("/[^a-zA-Z]/", "", $helper);
    $crmEntityObject = new CRM.$helper.External;
    $crmEntityObject -> deletePreviousScheduleExternal($params);
}

错误:致命错误:未捕获错误:在中找不到类“Escalon\Bundle\Admin\CRMBundle\Controller\CRM”

问题是类名没有正确连接。试试这个功能

private function deletePreviousSchedule($params)
{
    $queryParams = array();
    $em = $this->getDoctrine()->getManager();

    if($params['bundleAndTableName'] == 'EscalonAdminCRMBundle:ClientServiceTe')
    {
        $helper = 'Escalon\Bundle\Admin\CRMBundle\Helper\CRMTravelExpenseExternal';
    }

    $crmEntityObject = new $helper();
    $crmEntityObject->deletePreviousScheduleExternal($params);
}
您可以在此处找到更多关于此的文档-

而且,这也是可能的

use Escalon\Bundle\Admin\CRMBundle\Helper\CRMTravelExpenseExternal;
private function deletePreviousSchedule($params)
{
    $queryParams = array();
    $em = $this->getDoctrine()->getManager();

    if($params['bundleAndTableName'] == 'EscalonAdminCRMBundle:ClientServiceTe')
    {
        $helper = 'TravelExpense';
    }

    $className = "Escalon\Bundle\Admin\CRMBundle\Helper\CRM{$helper}External";
    $crmEntityObject = new $className();
    $crmEntityObject->deletePreviousScheduleExternal($params);
}

嗨,朋友,谢谢你的解决方案。它起作用了。但在我的情况下,我还需要根据if条件访问其他类。因此,我需要一个解决方案抛出,我可以将变量连接到类名之间,正如我在问题中提到的。我不确定为什么不能根据if条件使用第一个解决方案访问不同的类,但我添加了另一个解决方案。此外,您不需要
使用Escalon\Bundle\Admin\CRMBundle\Helper\CRMTravelExpenseExternal。我感谢您的帮助。