php弱类型变量是什么,php弱类型变量如何实现?
实现php弱类型变量的方法:1、通过Zend引擎用C实现弱类型,在ZE中用结构体zval来保存;2、通过Zend引擎是判别、存储PHP中的多种数据类型,根据type来选择获取【zvalue_value】的值。
实现php弱类型变量的方法:
PHP是弱类型,动态的语言脚本。在申明一个变量的时候,并不需要指明它保存的数据类型。例如:<?php
$var = 1;
$var = "variable";
$var = 1.00;
$var = array();
$var = new Object();
动态变量,在运行期间是可以改变的,并且在使用前无需声明变量类型。相关学习推荐:PHP编程从入门到精通
问题一、Zend引擎是如何用C实现这种弱类型的呢?
实际上,在PHP中声明的变量,在ZE中都是用结构体zval来保存的。
首先我们打开Zend/zend.h来看zval的定义:typedef struct _zval_struct zval;
struct _zval_struct {
/* Variable information */
zvalue_value value; /* value */
zend_uint refcount__gc;
zend_uchar type; /* active type */
zend_uchar is_ref__gc;
};
typedef union _zvalue_value {
long lval; /* long value */
double dval; /* double value */
struct {
char *val;
int len;
} str;
HashTable *ht; /* hash table value */
zend_object_value obj;
} zvalue_value;
Zend/zend_types.h:typedef unsigned char zend_bool;
typedef unsigned char zend_uchar;
typedef unsigned int zend_uint;
typedef unsigned long zend_ulong;
typedef unsigned short zend_ushort;
从上述代码中,可以看到_zvalue_value是真正保存数据的关键部分。通过共用体实现的弱类型变量声明
问题二、Zend引擎是如何判别、存储PHP中的多种数据类型的呢?
_zval_struct.type中存储着一个变量的真正类型,根据type来选择如何获取zvalue_value的值。
type值列表(Zend/zend.h):#define IS_NULL 0
#define IS_LONG 1
#define IS_DOUBLE 2
#define IS_BOOL 3
#define IS_ARRAY 4
#define IS_OBJECT 5
#define IS_STRING 6
#define IS_RESOURCE 7
#define IS_CONSTANT 8
#define IS_CONSTANT_ARRAY 9
来看一个简单的例子:<?php
$a = 1;
//此时zval.type = IS_LONG,那么zval.value就去取lval.
$a = array();
//此时zval.type = IS_ARRAY,那么zval.value就去取ht.
这其中最复杂的,并且在开发第三方扩展中经常需要用到的是”资源类型”.
在PHP中,任何不属于PHP的内建的变量类型的变量,都会被看作资源来进行保存。
比如:数据库句柄、打开的文件句柄、打开的socket句柄。
资源类型,会用lval,此时它是一个整型指示器, 然后PHP会再根据这个指示器在PHP内建的一个资源列表中查询相对应的资源。
正是因为ZE这样的处理方式,使PHP就实现了弱类型,而对于ZE的来说,它所面对的永远都是同一种类型zval。
php弱类型变量是什么,php弱类型变量如何实现?相关推荐
- 弱类型 python_弱的解释|弱的意思|汉典“弱”字的基本解释
详细字义 ◎ 弱 ruò 〈形〉 (1) (会意.小篆字形,两把弯曲的弓,"彡"( shān)象毛羽之形,合起来表示柔弱.本义:气力小;势力差) (2) 同本义.与"强& ...
- C语言:__attribute__((weak)) 弱符号与__attribute__ ((weakref())弱引用
C语言中的__attribute__((weak)) 与 __attribute__((weakref()) 引言:最近在看 linux 中一些驱动代码.驱动代码中为了实现程序的扩展性和兼容性用了很多 ...
- 服务器弱口令修改,Tomcat服务器弱口令漏洞攻击实验
1.在XP系统上搭建Tomcat服务器平台: 2.在另一台虚拟机上利用弱口令漏洞上传木马程序,使得XP系统中木马. 实验步骤 一.搭建Tomcat服务器平台 1.安装JAVAJDK 环境变量的配置:( ...
- PHP是弱类型还是强类型,php弱类型比较(松散比较) | CN-SEC 中文网
总结一下关于php(拍h片)弱类型相关知识的梳理. 前言 php有八种类型 标量类型:整数型integer,浮点型float,字符串类型string,布尔类型boolen 复合类型:对象 object ...
- android 的弱网测试,Android APP弱网测试问题和解决分析
最近做了一次移动APP的弱网和中断测试,接下来分享一下遇到的一些问题: 1.现象:用户登录应用时下载初始化数据,下载过程中因网速太慢点击取消并重新登录,数据初始化完成后出现重复,造成数据不一致. 原因 ...
- java引用 弱引用_了解Java弱引用
java引用 弱引用 我最近没来得及关注这个博客,最重要的是,我没有为与技术界的所有人保持联系而致歉. 最近,我偶然发现了自Java 1.2起可用的java.lang.ref软件包,但具有讽刺意味的是 ...
- python 强类型 弱类型_强类型、弱类型
什么是强类型,什么是弱类型? 之前一直写的OC语言,在自己的意识中,所有数据类型是定义好的,如果改变数据的类型必须进行强制类型转换. 但是接触了JavaScript后发现,一个变量,可以是字符串,也可 ...
- java 强类型 弱类型_强类型,弱类型,静态类型,动态类型的区别
强.弱类型 强类型strongly typed: 如果一种语言的所有程序都是well behaved--即不可能出现forbidden behaviors,则该语言为strongly typed. 弱 ...
- mysql弱口令字典_自制弱口令字典top100
在进行密码字典攻击时,经常使用到一些弱口令字典.而这些若口令字典基本都是通过各大网站泄露的密码,统计出使用频率最多的密码作为字典.这样就可以大大提高成功率.相信大家都听说过CSDN top 100,1 ...
最新文章
- 关于ubuntu 16.04 docker常用命令
- java流处理为什么快_“任何情况下,都不可以堕胎”是道德普遍主义的观点。
- python大数据分析实例-Python大数据处理案例
- c语言随机三位数,【分享代码】弥补c语言随机数不足
- WINCE基于MC8630的3G模块的控制和加载
- uml图工具_UML建模工具更新情况(二)
- 开启POP3/SMTP服务
- hdu 2579 BFS
- String Start!
- 第四十六期:最近程序员频繁被抓,如何避免面向监狱编程?!
- Postcard:简单的音乐贺卡制作
- 用DataGrip生成导出整个库数据的方法
- android 仿小米秒表,android实现秒表功能
- border-collapse
- maven依赖关系中 scope属性含义
- MySQL实战第二十二讲-MySQL有哪些“饮鸩止渴”提高性能的方法?
- js查找数组元素位置
- js实现json格式化,以及json校验工具的简单实现
- 程序员晒出从毕业到工作5年照片,抱怨头发掉光了,网友:很真实
- 2022.5.25 FreeSurfer入门练习:Recon-all