内调用PHP_FUNCTION让我详细说明标题。考虑例如PHP_FUNCTION(session_start)。我能否从另一个PHP_FUNCTION的session_id中调用session_start(这仅仅是为了说明而不是实际目的)?是否可以从扩展
Q
是否可以从扩展
3
A
回答
6
嗯,是的,但你应该尽可能避免它。编写函数内部实现的主要好处之一是,与PHP中发生的情况相反,C函数调用很便宜。另外,用C代码在内部调用PHP函数是相当痛苦的。
例如,在session_start
的情况下,您有php_session_start
,它由会话扩展显示。由于我在第一段中描述的内容,扩展通常会导出可能对其他人有用的C函数。
事实上,调用内部PHP函数bar
,最好的策略,需要内部PHP函数foo
如果可能的话,将是确定的辅助(非PHP_FUNCTION
)C与大多数的bar
的功能实现。然后PHP_FUNCTION(foo)
和PHP_FUNCTION(bar)
都可以调用该辅助功能。
不管怎样,调用PHP函数的最简单的方法是使用call_user_function
:
int call_user_function(HashTable *function_table, zval **object_pp,
zval *function_name, zval *retval_ptr, zend_uint param_count,
zval *params[] TSRMLS_DC);
的变体call_user_function_ex
还允许禁止分离时的参数应该参照由它来发送不是和指定符号表。
如果相关功能是内部功能(PHP_FUNCTION
)或在用户空间中定义,则这两种功能都可以使用。如果它是一个常规函数,则应该使用EG(function_table)
作为第一个参数,第二个参数应该为NULL,我认为您可以找出其他参数。
如果您多次执行此功能,这不是非常有效。在这种情况下,请参阅"Zend_API.h"中以zend_fcall_
开头的功能。
我不会推荐其他选项来调用内部函数,例如手动设置参数堆栈和其他技巧,以及他们手动调用底层C函数。
0
即。 session_start(session_id())
是的,但是在这种情况下它没有意义,因为session_id()
要求会话已经启动。
相关问题
- 1. 是否可以扩展DefaultValueAccessor?
- 2. 是否可以扩展DataColumn.Expression
- 3. 是否可以扩展类
- 4. 是否可以从Twig_Lexer扩展?
- 5. 是否可以扩展xaml setter?
- 6. 是否可以扩展Intellitrace事件?
- 7. 是否可以在Android中扩展Canvas?
- 8. 是否可以“隐藏”语言扩展?
- 9. 托管bean是否可以扩展DTO
- 10. 是否可以扩展私人功能?
- 11. Laravel 4 - 是否可以扩展DB类?
- 12. 是否可以扩展布局?
- 13. 是否可以扩展Java Enums?
- 14. 是否可以扩展混音?
- 15. 是否可以“扩展”财产“类”?
- 16. 是否可以扩展标准UI
- 17. 是否可以扩展快速申请
- 18. 是否可以扩展EventTarget接口?
- 19. 是否可以扩展现有的TypeConverter?
- 20. 是否可以“扩展”或重新使用Eclipse扩展点?
- 21. 是否可以使用扩展方法扩展泛型类?
- 22. 是否可以将Jetpack扩展转换为chrome扩展?
- 23. silverlight是否可扩展?
- 24. 是否可以从插件扩展Wordpress XMLRPC接口?
- 25. 是否可以从网站发起扩展?
- 26. 是否可以从Python中的内置函数类扩展?
- 27. C++的value_type是否可以从iterator_traits扩展到所有类型?
- 28. 是否可以从ODOO中的扩展类继承?
- 29. 是否可以从chrome扩展中访问COM对象?
- 30. 是否可以从vscode扩展内部验证OAuth 2.0 API
我不知道其他人,但我不明白你想要什么朋友:( – Iznogood 2010-09-01 03:08:45