天涯论坛

 找回密码
 立即注册
搜索
查看: 20|回复: 3

[精选] 问一下,你是怎么样理解php是弱类型语言的?

[复制链接]

3126

主题

3万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99108615
发表于 2024-10-4 17:00:16 | 显示全部楼层 |阅读模式

举荐关注

以下请在本公众号里操作

回复「微X群」

加入PHP技术交流群,一块学习交流

回复「资料」

免费获取 PHP 等语言学习视频课程。

回复「文档」

免费获取 PHP 等语言电子文档

回复「激活码」

免费获取 phpStorm2021版 专属激活码。

回复「商务合作」

就可获取合作方式与客服联系方式。

相信不少研发人员对网络上的 0 "0" null false 的讲解司空见惯,了然于胸了。

但我相信总有你忽略的细节,从变量结构方向出发,该怎样解释。那样瞧瞧下边的验证吧

echo php版本:.PHP_VERSION; //5.6.28$a =  0

$b="0"

$c= ; 

$d= null

$e = false

;

echo "5个变量-原始测试类型"

;

var_dump($a);//int 0var_dump($b);//string 0var_dump($c);//string var_dump($d);//nullvar_dump($e);//boolean falseecho "<h4>empty测试</h4>"

;

var_dump(empty($a));//truevar_dump(empty($b));//truevar_dump(empty($c));//truevar_dump(empty($d));//truevar_dump(empty($e));//trueecho "<hr>"

;

var_dump(isset($a));//truevar_dump(isset($b));//truevar_dump(isset($c));//truevar_dump(isset($d));//【false】 见结论一var_dump(isset($e));//trueecho "<h4>(==)双等式测试</h4>"

;

var_dump($a == $b);//truevar_dump($a == $c);//truevar_dump($a == $d);//truevar_dump($a == $e);//true !!var_dump($b == $c);//【false】见结论二var_dump($b == $d);//【false】见结论二var_dump($b == $e);//truevar_dump($c == $d);//truevar_dump($c == $e);//trueecho "<h4>(===)三等式测试</h4>"

;

var_dump($a === $b);//falsevar_dump($a === $c);//falsevar_dump($a === $d);//falsevar_dump($a === $e);//falsevar_dump($b === $c);//falsevar_dump($b === $d);//falsevar_dump($b === $e);//falsevar_dump($c === $d);//falsevar_dump($c === $e);//false

总结:针对 【0 ;"0" ; ;null;false】五种类型empty操作以上五个变量,都返回true强等于(===)比较 都为false,同强语言结果针对(==)比较,需要重视string类型,触及到底层结构与类型转换结论一:关于变量类型的理解1.null为不存在之意:php底层的zval空间里(结构见下方)存其value值,只存储了一个type标志其 IS_NULL(因此解释了 empty(null)=true,isset(null)=false ,isset()=true)2.【0 ; "0" ; "" ; false 】:这四个为存在,php底层是开辟zval空间存储,有value,有type结论二:从底层结构理解理解了上边结论一,那样下边的结论就容易理解了,还不太清楚的能够仔细看下【学习PHP底层就该学习PHP内核的存储机制】。

其中的【1.zval结构】,【2.zend_uchar type】部分1 string 0与 string 不相等,(想一下就明白,同类型比较【1个长度】的字符串怎么可能 等于 【0个长度】 的字符串,zal的value结构里,对string值有len原始记录的)。

2 int 0 却和 string 空相等,(非同类形比较,php会做类型转换)3 string 0 与 null 不相等4 int 0 与 null 相等说白了,针对php,碰到string "0" 的等式判断的时候,停顿重视一下就行。其他的等式判断正常,符合公众熟知的php研发思维。

php变量zval结构://存放变量的基本信息

struct _zval_struct {   /* Variable information */   zvalue_value value;  /* 变量值保留这儿 12字节*/   zend_uint refcount;//4字节,变量引用计数器     zend_uchar type;   /* active type变量类型 1字节*/zend_uchar is_ref;//是不是变量被&引用,0暗示非引用,1暗示引用,1字节  

};  

//存放变量的值

typedef union

 _zvalue_value {  

   long lval;      /* long value */   double dval;    /* double value */   struct {       char *val; //4字节       int len;   //4字节  

   } str;  

   HashTable *ht;    /* hash table value */

   zend_object_value obj;  

} zvalue_value;

原文链接:https://blog.csdn.net/ty_hf/article/details/70217267

点个赞

再走吧





上一篇:PHP弱类型你真的懂了吗?
下一篇:原创 文件加密的操作过程是什么?怎么对文件进行加密?丨4种类型的加密过程,速看
回复

使用道具 举报

3047

主题

3万

回帖

9606万

积分

论坛元老

Rank: 8Rank: 8

积分
96065852
发表于 2024-10-18 17:15:59 | 显示全部楼层
回顾过去一年,是艰难的一年;展望未来,是辉煌的一年。
回复

使用道具 举报

3089

主题

3万

回帖

9909万

积分

论坛元老

Rank: 8Rank: 8

积分
99098770
发表于 2024-10-19 19:05:16 | 显示全部楼层
论坛外链网  http://www.fok120.com/
回复

使用道具 举报

3139

主题

3万

回帖

9996万

积分

论坛元老

Rank: 8Rank: 8

积分
99968622
发表于 昨天 12:42 | 显示全部楼层
认真阅读了楼主的帖子,非常有益。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 11:47 , Processed in 0.342866 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.