当前位置:首页 > 日记 > 正文

PHP定义的第二个参数使用方法

PHP定义的第二个参数使用方法
手册上说,定义定义的常量只允许:
标量和空是允许的。标量的类型是整数、浮点数、字符串或布尔值。常量的类型也可以定义为资源,但不推荐,这可能导致未知条件的发生。
阅读PHP的源代码,发现第二个定义参数实际上可以是一个对象。
首先举个例子:
复制代码代码如下所示:
类{
公共功能__tostring(){
return'bar;
}
}

美元=新的A();
定义('foo,美元);
回声Foo;
输出

接下来,看看PHP中的定义是如何实现的。
复制代码代码如下所示:
zend_function(定义)
{
char *名称;
国际name_len;
*值变量;
zval * val_free = null;
zend_bool non_cs = 0;
国际case_sensitive = const_cs;
zend_constant C;

接收 / / 3参数,字符串,布尔变量,
如果(zend_parse_parameters(zend_num_args(tsrmls_cc)、深圳| B
返回;
}

/区分大小写
如果(non_cs){
case_sensitive = 0;
}

如果定义错误是常数。
如果(zend_memnstr(名称,::
zend_error(e_warning,类常量不能定义或重新定义了);
return_false;
}

获取真正的值,使用保存的
重复:
开关(z_type_p(Val)){
案例is_long:
案例is_double:
案例is_string:
案例is_bool:
案例is_resource:
案例is_null:
打破;
案例is_object:
如果(!val_free){
如果(z_obj_ht_p(Val)->得到){
val_free = = z_obj_ht_p缬氨酸(Val)->得到(Val tsrmls_cc);
去重复;
} else if(z_obj_ht_p(Val)-> cast_object){
alloc_init_zval(val_free);
如果(z_obj_ht_p(Val)-> cast_object(Val,val_free,is_string,tsrmls_cc)= =成功){
val_free val =;
打破;
}
}
}
没有中断/ ***
违约:
zend_error(e_warning,常数只能评估标量值);
如果(val_free){
zval_ptr_dtor(val_free);
}
return_false;
}

构建常量
c.value =×Val;
zval_copy_ctor(c.value);
如果(val_free){
zval_ptr_dtor(val_free);
}
c.flags = case_sensitive非持久性; / * * /
c.name = zend_strndup(名称、name_len);
c.name_len = name_len + 1;
c.module_number = php_user_constant;

注册/常量
如果(zend_register_constant(C tsrmls_cc)= =成功){
return_true;
{人}
return_false;
}
}

注意一个循环开始,重复,和使用goto语句t_t
此代码的功能是:
对于int,float,字符串,布尔,资源,null,使用这些值直接当实际常量定义
对于对象,您需要将对象转换为上面提到的6种类型之一(如果转换后仍然是对象,则继续转换)
如何使对象成为这6种类型中的一种有2种方法可以查看代码:
复制代码代码如下所示:
如果(z_obj_ht_p(Val)->得到){
val_free = = z_obj_ht_p缬氨酸(Val)->得到(Val tsrmls_cc);
去重复;
}
/ / __tostring()方法是在cast_object叫
如果(z_obj_ht_p(Val)-> cast_object){
alloc_init_zval(val_free);
如果(z_obj_ht_p(Val)-> cast_object(Val,val_free,is_string,tsrmls_cc)=成功)
{
val_free val =;
打破;
}
}

1、z_obj_ht_p(Val)->得到,在宏扩展(* Val)。价值。对象句柄->得到
2、z_obj_ht_p(Val)-> cast_object,在宏扩展(* Val)。价值。对象句柄-> cast_object
句柄是一个结构,包含了大量的函数指针,它专门定义的结构_zend_object_handlers.the函数指针来操作对象,如阅读或修改对象的属性,获取和调用对象的方法,等等…得到和cast_object也是其中之一。
对于一般的物体,PHP提供了一个标准的cast_object功能,zend_std_cast_object_tostring,位于src / / Zend PHP Zend对象句柄。C:
复制代码代码如下所示:
zend_api int zend_std_cast_object_tostring(zval * readobj,zval * writeobj,int型tsrmls_dc) / / *
{
*用zval;
zend_class_entry *;

开关(类型){
案例is_string:
CE = z_objce_p(readobj);

/ /如果用户定义的类__tostring,试着打
如果(CE -> __tostring
(zend_call_method_with_0_params(readobj,CE,CE -> __tostring,__tostring,retval)| | EG(例外))){
......

}
返回失败;
......
}
返回失败;
}

从具体实现,默认cast_object是找到__tostring类然后调用方法…
回到最初的示例,定义()

相关文章

PHP中的整数类型使用分析

PHP中的整数类型使用分析

类型,整数,电脑软件,PHP,整数可以是10, 8,16进制表示。 当八进制表示时,数字需要以0(零)开始。 需求数量开始0x(Zero X)或0x(零资本x)时,十六是代表。 整数溢出:当整数溢出时,它将自动转换为浮点类型。同样,如果整型操作结果溢出整数类型的边界,它将自…

QQ快乐个性签名:只要你看一眼就可以

QQ快乐个性签名:只要你看一眼就可以

你看,就可以,个性签名,快乐,电脑软件,你说我给的不是你要的幸福,那么你的hellip;和激情,与我何干 告别,是注定要结束的。 我假装我不在乎你,但它伤害了我。 甜言蜜语和良好的听力,但也只是修辞。 我的心很累,但我只是想静静地死去。 我们保证不在,…

Linux查找命令查找新的或旧的文件,

Linux查找命令查找新的或旧的文件,

文件,查找,命令,而不是,电脑软件,注释:find命令查找新的或旧的文件而不是文件,需要的朋友可以参考它。 如果您想找到所有对文件新的文件,但比另一个文件旧,可以使用较新的选项。 它的一般形式是: 复制代码代码如下所示: newest_file_name!oldest_…

runclubsandisk.exe的程序是什么闪

runclubsandisk.exe的程序是什么闪

促销,程序,广告,电脑软件,runclubsandisk,点评:这是一个闪迪闪迪U盘的优惠促销广告的功能,可以安全地删除 你已经看过这runclubsandisk.exe程序在U盘在计算机为什么在我们的U盘你有什么功能 runclubsandisk.exe过程的基本信息: 程序制造商:闪…

如何在Win8.1无线网卡是否开启它在

如何在Win8.1无线网卡是否开启它在

无线网络,无线网卡,系统,开放系统,它在,注意:在使用Windows8.1系统的过程中,许多用户遇到Win8.1无线网卡不能使用,Win8.1无线网卡的具体表现可以搜索不到无线信号,如果有如何解决故障。这里有一个具体的解决方案。 无线设备驱动程序正常,但没有…

Linux决定当前用户是否为root用户

Linux决定当前用户是否为root用户

用户,当前用户,电脑软件,Linux,root,评论:在Linux中,如何判断当前用户是否是root权限本文提供的测试代码,有需要的朋友可以参考下。 在Linux中,如何判断当前用户是否为root用户 确定当前用户是否为root用户。 复制代码代码如下所示: 根用户检…

合并单元格时保留所有值

合并单元格时保留所有值

合并单元格,电脑软件,合并单元格是用户生成表的常用命令。它可以显示多个细胞作为细胞,起到美化的作用。 通常情况下,如果包含单元格合并的数据数,Excel将提示;在合并的单元格中,如果包含选定单元格的多个数据,Excel将保留单元格数据的左上角,并…

对randomdigits.exe-使用randomdig

对randomdigits.exe-使用randomdig

电脑软件,randomdigits,exe,点评:randomdigits.exe是jonbarr D病毒相关程序。 进程文件:randomdigits或randomdigits.exe 进程名称:jonbarr。D病毒 过程类别:安全风险的过程 英文描述: 作为一个结果jonbarr D病毒的!在2,3,第二是最大的。 中文参考…

win7系统的离开模式下载系统的边缘

win7系统的离开模式下载系统的边缘

系统,边缘,模式,下载,让你,点评:待机模式超过待机模式,离开前,视频处理,bt下载,文件复制操作仍在进行中,它是节能的,两个正确的,下面使用具体的方法,感兴趣的朋友可以参考一下。 一、计算机的发车方式是什么 Windows的离开模式类似于待机(或休眠),待机…

IE10是一些页面无法正常显示或无法

IE10是一些页面无法正常显示或无法

弹出,溶液,正常显示,页面,电脑软件,问题: 在电脑上安装IE10,想体验,发现一些网页无法打开,提示页面无法正常显示;有些页面不能玩。有什么事吗 答案uff1a IE10浏览器的问题提到的,这是可能的,网站是不是用新的IE10浏览模式通过这个提案引起的兼容…

绝版QQ秀有过期时间吗

绝版QQ秀有过期时间吗

时间,电脑软件,QQ,绝版物品和其他物品如QQ显示将过期。建议在商品到期前及时续费,以确保您能将货物打印出来,随着时间的推移,您将越来越多的贵重物品绝版。 温馨提示:如果您开通了红色钻服务,您可以在红钻过程中免费保存您的打印项目,同时您还拥…

schupd是schupd.exe-使用

schupd是schupd.exe-使用

电脑软件,schupd,exe,点评:schupd.exe是趋势趋势科技杀毒软件的自动升级程序 进程文件:schupd或schupd.exe 过程名称:趋势微反病毒 过程类别:安全风险的过程 英文描述: schupd.exe是一个过程,属于趋势科技反病毒 中文参考: schupd.exe是趋势趋势…