在 Zephir 中使用 PDO

Using PDO in 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");

Zephir 抛出异常

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

通过一些搜索我解决了这个问题 - new 是 Zephir 中的保留字,必须用 $new 替换。

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

迅速产生

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

当我意识到我必须明确告诉 Zephir 使用 PDO 名称时,我解决了这个问题 space

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 应用程序的一些更 CPU 密集的位,但缺少它的文档。例如,文档中没有任何地方说明使用数组的正确方法是

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

错过第一个列表,编译器抱怨无法变异。

对于我当前的 PDO 问题,显然还有其他问题,但我不知道它可能是什么。如果有任何帮助,我将不胜感激。

zephir 中的var 关键字用于变量声明。 如果您分配一个 "simple" 值,例如字符串或数组, 它会起作用。

你的例子的问题在于 new PDO(<arguments>) 是一个表达式, 其中 var 运算符不是正确的选择。 所以你想要的是赋值。

默认情况下变量是不可变的。 (参见 zephir-lang.com)
这就是为什么您需要使用 let 运算符,这使它们不可变 并且能够解析表达式。

所以你需要使用varlet
喜欢 var dbh; let dbh = new \PDO(<arguments>);

如果你这样做,它就有效:)