2014-12-08 3 views
0

я пытаюсь динамически вызов класса в PHP, но каждый раз, когда я пытаюсь я получаю сообщение об ошибке говорит мне, что класс не может быть найденне может динамически вызвать класс

это мой класс завод (я использую фабричный метод для создания классов dynmically на лету):

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

} 

сообщение об ошибке: это ошибка я получаю, когда я попытался назвать класс

Fatal error: Class 'ProfileApproved' not found

инстанцировании и Вызов класса это, как я назвал класс:

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

класс может быть найден, потому что, когда я делаю это, система способна оказывать класс:

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

    } 

Я использую PHP 5.5.12

поэтому я должен уметь отображать класс.

признателен за любые советы, как я сделал

CLAIRIFCATION

Я забыл упомянуть, что я сделал включать имя класса в верхней части страницы: т.е.

include_once('ProfileApproved.php'); 

вот мой профильApproved Class

Ниже i s мой класс 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

где ваш профильApporved class определен/объявлен? Если он не находится в том же файле, используйте автозагрузку, чтобы включить его при создании экземпляра .. –

+0

привет. ПрофильApporved находится в том же каталоге. Я также пытался использовать автозагрузчик, но он не имеет значения, все еще не работает –

+0

вы используете пространства имен? – astroanu

ответ

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), прежде чем пытаться создать экземпляр класса.

Редактировать: Я изменил свой код на использование пространств имен.

+0

привет Джеймс. да. Я действительно включил имена файлов. Я все пробовал. Я даже попытался использовать функцию class_exists(). я очень озадачен этим. код, который вы вставили здесь, точно похож на мой код. так что я не понимаю, почему это не работает –

+0

Не могли бы вы опубликовать ProfileApproved код? Существуют ли какие-либо конкретные требования к конструктору и т. Д.? –

+0

привет Джеймс. я добавлю ProfileApproved Class сейчас –

Смежные вопросы