首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zephir扩展名中的多个类文件

Zephir扩展名中的多个类文件
EN

Stack Overflow用户
提问于 2014-01-25 10:43:11
回答 1查看 1.1K关注 0票数 4

我正在用Phalcon Zephir做一些实验,看看它能把我的一些库转换成PHP扩展的效果如何。

我有两个PHP类,每个类都已经在自己的文件中定义了: Zephir注释非常清楚,必须是这样的。

trienode.zep

代码语言:javascript
复制
namespace tries;

class trienode
{
    public children;

    public valueNode = false;

    public value = null;

    public function __construct()
    {
        let this->children = [];
    }
}

trie.zep

代码语言:javascript
复制
namespace tries;

class trie {

    private trie;

    public function __construct() {
        let this->trie = new trienode();
    }
}

但是,每当我试图使用zephir compile编译类时,我就会得到

代码语言:javascript
复制
Warning: Class "trienode" does not exist at compile time  in /home/vagrant/ext/tries/tries/trie.zep on 8 [nonexistent-class]

            let this->trie = new trienode();
    ---------------------------------------^

(如果我继续完成构建过程,并安装生成的.so文件,那么当我试图在PHP脚本中使用它时,它会出错)

代码语言:javascript
复制
<?php

namespace tries;

$test = new trie;

给予

代码语言:javascript
复制
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20121212/tries.so' - /usr/lib/php5/20121212/tries.so: undefined symbol: zephir_tries_trie_init in Unknown on line 0
PHP Fatal error:  Class 'tries\trie' not found in /home/vagrant/triesTest.php on line 5

我已经查看了Zephir文档和各种博客文章,但是找不到构建一个包含多个类文件的扩展名的例子。

是否有人成功地使用Zephir构建了一个包含多个类的扩展?如果是这样的话,它需要哪些设置或配置选项(或附加步骤)来构建工作状态?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-25 11:07:28

该名称空间似乎必须包含在调用中。

代码语言:javascript
复制
let this->trie = new tries\trienode();
//                   ^^^^^^

我没有在文档中显式地看到这一点,但是在返回类型提示部分中暗示了(原谅双关语),它在提示中使用了名称空间。

将示例类更改为上面所示的类允许扩展按需要进行编译。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21349489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档