У меня есть два файла PHP, один - «Pages.php» с class Pages{}, а второй - «Core.php» с class Core{}. Я включил Pages.php в конструктор «Базового класса» и попытался вызвать общедоступный метод с именем home() из «Класса Страниц». Но показывает следующую ошибку:

Неперехваченная ошибка: объект класса Core не удалось преобразовать в строку.

class Core {
    protected $currentController  = 'Pages';
    protected $currentMethod  = 'home';
    protected $params = [];

    public function __construct() {      
        require_once '../app/controllers/' . $this->currentController . '.php';
        
        $this->currentController = new $this->currentController();
  
        $this->currentController->$this->currentMethod();        

    }   
    
}

Если я вызову такой метод

$a = $this->currentMethod;

$this->currentController->$a();

Работает нормально ... Но я хочу знать, почему я не могу вызвать такой метод $this->currentController->$this->currentMethod();?

1
user14982116 13 Фев 2021 в 17:29

1 ответ

Лучший ответ

Вы не можете использовать этот синтаксис из-за порядка интерпретации.

Если вы хотите сделать это одной строкой, вы можете использовать {}, чтобы «интерпретировать» контент как блок.

$this->currentController->{$this->currentMethod}();
2
Syscall 13 Фев 2021 в 15:19