Использование PDO в Zephir

В рамках моих экспериментов с Zephir в настоящее время я пытаюсь использовать PHP PDO для доступа к базе данных MySQL. Для начала я обнаружил, что относительно безобидным

$dbh = new PDO("mysql:host=localhost;dbname=dbn;","user","pwd");

когда переведено и использовано в Zephir

var dbh = new PDO("mysql:host=localhost;dbname=dbn;","user","pwd");

Зефир бросил исключение

var dbh = new PDO
------------^

что в результате некоторых поисков я решил — new — зарезервированное слово в Zephir и должно быть заменено на $ new.

var dbh = $new PDO("mysql:host=localhost;dbname=dbn;","user","pwd");

который быстро произвел

var dbh = $new PDO(
-----------------^

который я решил, когда понял, что должен явно указать Zephir использовать пространство имен PDO

use \PDO;
var dbh = $new \PDO::PDO(

Теперь с

var dbh = $new \PDO::PDO("mysql:host=localhost;dbname=dbn","user","pwd");

я получил

var dbh = $new \PDO::PDO(...,"user","pwd");
---------------------------------------------^

что имеет мало смысла для меня.

Из того, что я могу сказать, Зефир еще слишком молод, чтобы рассматривать его как полноценный порт работающего прототипа PHP. Тем не менее, похоже, что он достаточно хорош для того, чтобы использовать его для портирования некоторых более ресурсоемких битов PHP-приложения, но его документация отсутствует. Например, нигде в документации не говорится, что правильный способ использовать массив

array myArray;
let myArray = [1,2,...];

Пропустите первый список, и компилятор жалуется, что не может изменить его.

С моей нынешней проблемой PDO явно что-то не так, но я понятия не имею, что это может быть. Я очень признателен за любую помощь.

2

Решение

var Ключевое слово в Zephir для объявлений переменных.
Если вы назначите «простое» значение, такое как строка или массив,
это будет работать.

Проблема с вашим примером в том, что new PDO(<arguments>) это выражение,
где var оператор не правильный выбор.
Так что вы хотите, чтобы назначить значение.

Переменные по умолчанию неизменны. (см. zephir-lang.com)
Вот почему вам нужно использовать let оператор, который делает их неизменяемыми
и умеет разрешать выражения.

Так что вам нужно использовать var а также let
лайк var dbh; let dbh = new \PDO(<arguments>);

И если вы делаете это таким образом, это работает 🙂

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]