Как создать экземпляр класса (из массива) внутри цикла

#php #laravel

#php #laravel

Вопрос:

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

 <?php
   use AppCaves_demographic_info;
   use AppCaves_current_uses;
   use AppCaves_flora_outside;

   public function get_page4_contd_data($id) {
     $tables = [
        'Caves_demographic_info', 'Caves_current_uses', 'Caves_flora_outside',
     ];


    for($index = 0; $index < count($tables); $index  ) {
        ${$tables[$index]."_model"} = new $tables[$index];
    }

   }
?>
  

Это выдает ошибку ‘Class {имя_класса} не найден’, возможно ли это сделать внутри цикла?

Ответ №1:

Ваш подход кажется правильным, можете ли вы попробовать (с пространством имен)

 $className = 'App' . $tables[$index];
$class = new $className;
  

Итак, что-то вроде этого в вашем примере:

  $tables = [
    'AppCaves_demographic_info', 
    'AppCaves_current_uses', 
    'AppCaves_flora_outside',
 ];

for($index = 0; $index < count($tables); $index  ) {
    ${$tables[$index]."_model"} = new $tables[$index];
}
  

Комментарии:

1. все еще не работает.. второй подход выдает ту же ошибку. первый подход приводит к неожиданной ошибке

2. Можете ли вы попробовать это с namespace? Я только что попробовал в своем коде, с полным пространством имен это должно сработать

3. но как бы вы проанализировали обратную косую черту в строке?

4. удачного кодирования! 🙂

5. $className = 'App' . $tables[$index]; должно быть $className = 'App\' . $tables[$index]; (экранированная обратная косая черта).