前提・実現したいこと
動的な名前空間に use を利用してクラスインスタンスの生成を行いたいです。
しかし use を利用してインスタンスを生成すると構文エラーが表示され実現することができません。
何らかの方法で実現することは可能でしょうか?ご教授いただければ幸いです。
発生している問題・エラーメッセージ
Parse error: syntax error, unexpected '$order' (T_VARIABLE), expecting identifier (T_STRING) in ~~~ core\Routing.php on line 13
該当のソースコード
index.php
PHP
1<?php 2 3define('Root', realpath('../') . '/'); 4 5require_once Root . 'core/AutoLoader.php'; 6 7$autoLoader = new AutoLoader(Root); 8$autoLoader->loading(); 9 10$route = [ 11 '/' => [ 12 'controller' => 'IndexController', 13 'method' => 'indexMethod', 14 ], 15]; 16 17$routing = new core\Routing(); 18$routing->router($route);
Routing.php
PHP
1<?php 2 3namespace core; 4 5use app\controllers as controllers; 6 7class Routing { 8 9 public function router($route) { 10 11 foreach ($route as $url => $order) { 12 13 // ここでインスタンスの生成を行いたい。 14 15 // 構文エラーが発生する。(1パターン目) 16 $instance = new controllers$order['controller']; //構文エラー 17 18 // use が適用されておらずクラスが見つからない。(2パターン目) 19 $controller = 'controllers\' . $order['controller']; 20 $instance = new $controller; 21 } 22 } 23}
use を利用しない方法ではエラーを起こさず、インスタンスを生成することができています。
PHP
1<?php 2 3namespace core; 4 5// use app\controllers as controllers; 6 7class Routing { 8 9 public function router($route) { 10 11 foreach ($route as $url => $order) { 12 13 $controller = 'app\controllers\' . $order['controller']; 14 $instance = new $controller; 15 } 16 } 17}
補足情報(FW/ツールのバージョンなど)
PHP 7.4
大文字小文字は適切に
あなたの回答
tips
プレビュー