我想在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";
}
}
答案 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)。
编辑:我将代码更改为使用命名空间。