не в состоянии динамически вызывать класс

0

Я пытаюсь динамически вызвать класс в 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";
    }
}
  • 0
    где ваш класс ProfileApporved определен / объявлен? Если он не находится в том же файле, используйте автозагрузку, чтобы правильно включить его при создании экземпляра.
  • 0
    Здравствуй. ProfileApporved находится в том же каталоге. Я также пытался использовать автозагрузчик, но это не имеет значения, по-прежнему не работает
Показать ещё 5 комментариев
Теги:
oop

1 ответ

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
    Не могли бы вы опубликовать одобренный код профиля? Есть ли какие-то особые требования к конструктору и т. Д.?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню