Я пытаюсь динамически вызвать класс в php, но каждый раз, когда я пытаюсь получить сообщение об ошибке, сообщаю мне, что класс не может быть найден
это моя фабрика классов (я использую фабричный метод для динамического создания классов "на лету"):
class EmailFactory
{
public function build ($class)
{
return new $class();
}
}
сообщение об ошибке: это ошибка, которую я получаю, когда пытаюсь вызвать класс
Неустранимая ошибка: Class 'ProfileApproved' не найден
Выполнение и вызов класса - это то, как я назвал класс:
$this->emailClass = (new EmailFactory)->build("ProfileApproved");
класс можно найти, потому что, когда я это делаю, система может отображать класс:
class EmailFactory
{
public function build ($class)
{
return new ProfileApproved();
}
}
Я использую php 5.5.12
поэтому я должен уметь отображать класс.
оцените любой совет, как я это сделал
CLAIRIFCATION
Я забыл упомянуть, что я включил название класса в верхней части страницы: ie
include_once('ProfileApproved.php');
вот мой класс ProfileApproved
Ниже мой класс ProfileApproved. в классе нет ничего особенного, нет конструкторов. он просто отображал HTML-адрес электронной почты.
поэтому нет причин, по которым он не должен отображаться динамически.
namespace ConversionEmails\Services\Employer\Emails;
use ConversionEmails\Services\ConversionEmails as Emails;
class ProfileApproved implements Emails
{
public function getHtmlEmail($params)
{
return "test works";
}
}
Включили ли вы файл класса?
<?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), прежде чем пытаться создать экземпляр класса.
Изменение: я изменил свой код на использование пространств имен.