Я пытаюсь Zephir создать расширение PHP.
Я создал проект (с именем "Cherry") со следующей структурой:
cherry/
|__ config.json
|__ cherry/
| |__ Api.zep
| |__ routing/
| |__ Request.zep
| |__ Response.zep
| |__ Route.zep
| |__ Router.zep
|__ ext/
В файле Api.zep
У меня есть метод запуска:
namespace Cherry;
// ...
public function run() {
var route = explode("?", _SERVER["REQUEST_URI"])[0];
var method = _SERVER["REQUEST_METHOD"];
var request = new Routing\Request(method, route);
var response = this->router->dispatch(request);
}
Он создает запрос и отправляет его маршрутизатору для поиска подходящего маршрута и метода.
Класс запроса чрезвычайно базовый c:
namespace Cherry\Routing;
class Request
{
private method {
get
};
private url {
get
};
public function __construct(string method, string url) {
let this->method = method;
let this->url = url;
}
}
Но если я попытаюсь собрать его (в Ubuntu 18.04.4, 64-разрядная версия), он выдаст следующую ошибку (да, это полное сообщение об ошибке):
[ERROR] Unknown type: new
Я прокомментировал строку var request = new Routing\Request(method, route);
, и эта конкретная c ошибка исчезла. Когда я раскомментирую это, ошибка появляется снова. Итак, я знаю, что это указанная строка c.
Я удалил аргумент method
и route
, чтобы посмотреть, вызывает ли он правильную функцию и вызывает ли он Cherry\Routing\Request::__construct
, поскольку он жалуется на неправильную количество аргументов.
Но с аргументами он говорит, что не знает тип new
.
Я что-то пропустил или это ошибка?
У меня есть другие функции, в которых я создаю экземпляры классов, и у меня там нет проблем.
Редактирование :
Я пытался установить переменную на null
до:
var request = null;
let request = new Routing\Request(method, route);
но это не помогло.
Изменение типа переменной request
на object
тоже не помогло.