在Zephir中使用PDO

时间:2015-02-01 05:22:48

标签: php 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
------------^

通过我解决的一些搜索 - 新的是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");
---------------------------------------------^

对我来说没什么意义。

据我所知,Zephir还太年轻,无法考虑使用PHP原型的完整端口。但是,它似乎足以用于移植PHP应用程序的一些CPU密集型位,但缺少其文档。例如,在文档中没有说明使用数组的正确方法是

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

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

根据我目前的PDO问题,显然还有其他问题,但我不知道它可能是什么。我非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

zephir中的var关键字用于变量声明。 如果指定一个“简单”值,如字符串或数组, 它会起作用。

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

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

因此您需要使用varlet
比如var dbh; let dbh = new \PDO(<arguments>);

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