整数
$lng = 2;
zval var_value;
ZVAL_LONG(&var_value, 2);
zend_set_local_var_str("lng", 3, &var_value, 0);
ZVAL_NULL(&var_value);
浮点
$lng = 2.5;
zval var_value;
ZVAL_LONG(&var_value, 2);
zend_set_local_var_str("lng", 3, &var_value, 0);
ZVAL_NULL(&var_value);
字符串
$lng = "abc";
ZVAL_STRING(&var_value, "abc");
zend_set_local_var_str("lng3", 4, &var_value, 0);
ZVAL_NULL(&var_value);
数组
$lng4 = [2=>1,'ab'=>c];
array_init(&var_value);
add_index_long(&var_value, 2, 1);
add_assoc_stringl_ex(&var_value, "ab", 2, "c", 1);
zend_set_local_var_str("lng4", 4, &var_value, 0);
ZVAL_NULL(&var_value);
对象
$lng4 = new demo();
zend_class_entry* ce;
zend_string* class_name;
class_name = zend_string_init("demo", 4, 0);
ce = zend_fetch_class(class_name, ZEND_FETCH_CLASS_AUTO); //获取类
zend_string_release(class_name);
object_init_ex(&var_value, ce);
zend_set_local_var_str("lng5", 4, &var_value, 0); //设置本地变量
ZVAL_NULL(&var_value);
整体代码
PHP_FUNCTION(confirm_arithmetic_compiled)
{
zval var_value;
ZVAL_LONG(&var_value, 2);
zend_set_local_var_str("lng1", 4, &var_value, 0);
ZVAL_NULL(&var_value);
ZVAL_DOUBLE(&var_value, 2.5);
zend_set_local_var_str("lng2", 4, &var_value, 0);
ZVAL_NULL(&var_value);
ZVAL_STRING(&var_value, "abc");
zend_set_local_var_str("lng3", 4, &var_value, 0);
ZVAL_NULL(&var_value);
array_init(&var_value);
add_index_long(&var_value, 2, 1);
add_assoc_stringl_ex(&var_value, "ab", 2, "c", 1);
zend_set_local_var_str("lng4", 4, &var_value, 0);
ZVAL_NULL(&var_value);
//创建对象变量
zend_class_entry* ce;
zend_string* class_name;
class_name = zend_string_init("demo", 4, 0);
ce = zend_fetch_class(class_name, ZEND_FETCH_CLASS_AUTO); //获取类
zend_string_release(class_name);
object_init_ex(&var_value, ce);
zend_set_local_var_str("lng5", 4, &var_value, 0); //设置本地变量
ZVAL_NULL(&var_value);
}
测试代码
class demo {}
confirm_arithmetic_compiled();
var_dump($lng1);
var_dump($lng2);
var_dump($lng3);
var_dump($lng4);
var_dump($lng5);
常量
//定义常量数组详见:https://www.cnblogs.com/CoderK/articles/6943287.html
REGISTER_STRINGL_CONSTANT("__SITE__", "www.bo56.com", 12, CONST_PERSISTENT);
REGISTER_NS_STRINGL_CONSTANT("say", "__SITE__", "bo56.com", 8, CONST_CS|CONST_PERSISTENT);//命名空间