作为我使用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问题,显然还有其他问题,但我不知道它可能是什么。我非常感谢任何帮助。
答案 0 :(得分:4)
zephir中的var
关键字用于变量声明。
如果指定一个“简单”值,如字符串或数组,
它会起作用。
你的例子的问题是new PDO(<arguments>)
是一个表达式,
其中var
运算符不是正确的选择。
所以你想要的是分配一个值。
默认情况下,变量是不可变的。 (见zephir-lang.com)
这就是为什么你需要使用let
运算符,这使它们成为不可变的
并且能够解决表达式。
因此您需要使用var
和let
比如var dbh; let dbh = new \PDO(<arguments>);
如果你这样做,那就有效:)