php - 如何解决这个重名错误?

标签 php c php-extension

我想创建一个 native 原始数据类型扩展,它对强类型很有用。我首先定义了一个名为 ObjectInterface 的接口(interface),然后定义了一个名为 Object 的类。显然,Object 实现了 ObjectInterface,我有以下代码:

/* {{{ scalarclass_functions[]
 *
 * Every user visible function must have an entry in scalarclass_functions[].
 */
const zend_function_entry scalarclass_functions[] = {
        PHP_ABSTRACT_ME(ObjectInterface, equals, arginfo_object)
        PHP_ABSTRACT_ME(ObjectInterface, getClass, arginfo_void)
        PHP_ABSTRACT_ME(ObjectInterface, getClassName, arginfo_void)
        PHP_ABSTRACT_ME(ObjectInterface, hashCode, arginfo_void)
        PHP_ABSTRACT_ME(ObjectInterface, __toString, arginfo_void)
        PHP_ME(Object, equals, arginfo_object, ZEND_ACC_PUBLIC)
        PHP_ME(Object, getClass, arginfo_void, ZEND_ACC_PUBLIC)
        PHP_ME(Object, getClassName, arginfo_void, ZEND_ACC_PUBLIC)
        PHP_ME(Object, hashCode, arginfo_void, ZEND_ACC_PUBLIC)
        PHP_ME(Object, __toString, arginfo_void, ZEND_ACC_PUBLIC)
        PHP_FE_END      /* Must be the last line in scalarclass_functions[] */
};

当然,这只是代码的一部分,我没有显示对象类方法的方法定义,因为代码可能有点长且分散注意力。然后我遇到了一个问题,它给了我对象类方法的重复名称错误。

PHP Warning:  Function registration failed - duplicate name - equals in Unknown on line 0
PHP Warning:  Function registration failed - duplicate name - getClass in Unknown on line 0
PHP Warning:  Function registration failed - duplicate name - getClassName in Unknown on line 0
PHP Warning:  Function registration failed - duplicate name - hashcode in Unknown on line 0
PHP Warning:  Function registration failed - duplicate name - __toString in Unknown on line 0

编译器似乎无法分辨方法 Object::equals()ObjectInterface::equals() 是不同的方法,而是假定它们是相同并抛出重复名称警告。我该如何解决这个问题?

我试图定义第二个 zend_function_entry 结构,但它也不起作用,因为第二个 zend_function_entry 只是被编译器忽略了。我看到 PHP 内置的 DateTime 和 Reflection 扩展能够解决这个问题,但这怎么可能呢?

最佳答案

您必须将这两个 zend_function_entries 与 INIT_CLASS_ENTRY 宏一起用作相应类条目的方法条目,并在 MINIT 中注册您的类。

模块结构的 zend_function_entry 只能有函数,不能有方法。

关于php - 如何解决这个重名错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28808700/

相关文章:

php - 无法打开 sunrise.php 以包含在内

python - 一种在 C 中模拟命名参数的方法

c - 指针存储在哪里?

c - WinMain 入口点 - 汇编代码看起来好像没有参数传递给入口点

c - 使用 zend 读取 php.ini for PHP 扩展(不是 PHP 语言)

apache - PHP 扩展 : Works from command line, 但不在 httpd (Apache) 服务器中

php - Laravel - MySqlConnection'没有方法 'selectRaw'

php - MySql 在多列中搜索姓名和电子邮件

php - 如何在 bluemix 上安装 php 扩展?

php - 如何使用 MySQL 表过滤 php 数组?