2015-02-01 2 views
2

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

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

при переводе и используется в Зефир

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

был Зефир подбрасывая исключение

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

который посредством некоторого поиска я решил - новое является зарезервированным словом в Zephir и должно быть заменено на $ new.

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

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

var dbh = $new 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"); 
---------------------------------------------^ 

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

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

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

Miss из первого списка и компилятор жалуется не в состоянии мутировать.

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

+0

Dang, мы действительно нужен парень Зефир в SO, чтобы ответить на эти вопросы Зефир , – Pacerier

ответ

4

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

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

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

Таким образом, вы должны использовать var и let
как var dbh; let dbh = new \PDO(<arguments>);

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

Смежные вопросы