我也不知道,所以让我们一起通过查看var_dump! (寻找PHP_FUNCTION(var_dump))。
(对于TL;DR,跳到最后)
PHP 函数var_dump是 C 函数的包装器php_var_dump。
php_var_dump有一个switch()语句为每个 PHP 的基本类型(数字、字符串、布尔值、对象等)生成不同的输出,我们对object类型感兴趣。
在case IS_OBJECT:案例中,我们看到了这一点:
php_printf("%sobject(%s)#%d (%d) {\n", COMMON, ZSTR_VAL(class_name), Z_OBJ_HANDLE_P(struc), myht ? zend_array_count(myht) : 0);
Run Code Online (Sandbox Code Playgroud)
将#10在输出来自#%d格式字符串,这是第三Ç可变参数arg的一部分,并且(0)是第四Ç可变参数ARG。
Z_OBJ_HANDLE_P(struc)myht ? zend_array_count(myht) : 0Z_OBJ_HANDLE_P基本上为 PHP 中的对象返回一个唯一标识符(因此您的 PDO 实例是在处理此请求时创建的第 11 个对象(我认为,见下文))。
该myht事情更加复杂:但如果它的设置就意味着你问到PHPvar_dump的object成员属性(而不是对象本身),例如var_dump( $foo->bar )代替var_dump( $foo )。如果您不是指对象属性,那么它只会打印0.
->handle确定值及其含义:Z_OBJ_HANDLE_P宏 Z_OBJ_HANDLE(*(zval_p))
Z_OBJ_HANDLE宏(Z_OBJ((zval)))->handleZ_OBJ宏(zval).value.objZ_OBJ_HANDLE_P(x)是一样的x.value.obj->handleuint32 handle成员(但单独实现)。
_zend_object与_zend_resource在zend_types.hzend_list_insert(然后使用ZVAL_NEW_RES宏)。该->handle值是该列表中的索引(尽管我不确定它是从0或1还是其他一些基础开始)。class对象(“用户类型”等),使用该zend_objects_store_put函数将对象添加到objects_store列表并返回列表中项目的索引(因此它在概念上类似于zend_list_insert)。
0,1或别的东西)。所以object(PDO)#11 (0) { }意思是:
PDO类的一个实例。| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |