作为Zephir实验的一部分,我目前正在尝试使用PHP访问MySQL数据库。首先,我发现一个相对无害的
$dbh = new PDO("mysql:host=localhost;dbname=dbn;","user","pwd");在泽皮尔翻译和使用时
var dbh = new PDO("mysql:host=localhost;dbname=dbn;","user","pwd");让Zephir吐出一个异常
var dbh = new PDO
------------^通过一些搜索,我解决了-新是一个保留字在泽皮尔,必须替换为$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问题,有一个明显的错误,但我不知道它可能是什么。我非常感谢你的帮助。
发布于 2015-02-16 17:02:24
zephir中的var关键字用于变量声明。如果您分配一个“简单”值,如字符串或数组,它将工作。
您的示例的问题是,new PDO(<arguments>)是一个表达式,其中var运算符不是正确的选择。所以你想要的是分配一个值。
变量在默认情况下是不可变的。(见zephir-lang.com)
这就是为什么您需要使用let运算符,这使得它们是不可变的,并且能够解析表达式。
所以你需要使用var和let
就像var dbh; let dbh = new \PDO(<arguments>);
如果你这样做的话,它就有效了:)
https://stackoverflow.com/questions/28259770
复制相似问题