无法动态调用类

时间:2014-12-08 11:51:46

标签: php oop

我想在php中动态调用一个类,但每次我尝试时都会收到一条错误消息,告诉我该类无法找到

这是我的班级工厂(我正在使用工厂方法动态创建类):

class EmailFactory 
{
  public function build ($class)  
 {
   return new $class();
  }

}

错误消息: 这是我在尝试调用类

时得到的错误
  

致命错误:未找到“ProfileApproved”类

实例化和调用类 这就是我打电话给班级的方式:

 $this->emailClass = (new EmailFactory)->build("ProfileApproved");

可以找到类,因为当我这样做时,系统能够呈现类:

class EmailFactory 
    {
      public function build ($class)  
     {
       return new ProfileApproved();
      }

    }

我正在使用php 5.5.12

所以,我应该能够渲染这个类。

欣赏我所做的任何建议

CLAIRIFCATION

我忘了提到我确实在页面顶部包含了该类的名称:即

include_once('ProfileApproved.php');

这是我的ProfileApproved Class

以下是我的ProfileApproved类。关于班级没有什么特别的,没有建设者。它只是呈现HTML电子邮件。

所以,没有理由不动态渲染它。

namespace ConversionEmails\Services\Employer\Emails;

use ConversionEmails\Services\ConversionEmails as Emails;

class ProfileApproved  implements Emails
{

    public function getHtmlEmail($params)
    {      
        return "test works";
    }
}

1 个答案:

答案 0 :(得分:2)

您是否已收录该课程的文件?

<?php

namespace EXAMPLE;

class Calling
{
    public function build( $ns, $name )
    {
        $name = $ns . $name;
        if( !class_exists ( $name ) )
        {
            echo 'The class doesn\'t exist' . PHP_EOL;
            return;
        }

        return new $name();
    }
}

class Called
{
    public function __construct()
    {
        echo 'Works for me' . PHP_EOL;
    }
}

$var = ( new Calling )->build( '\\EXAMPLE\\', 'Called' );

这对我来说非常好。

编辑:在尝试实例化类之前尝试调用class_exists(http://php.net/manual/en/function.class-exists.php)。

编辑:我将代码更改为使用命名空间。