关于 imagetypes() & IMG_PNG 语法问题

今天在知道碰到有网友对 PHP 手册上的这段代码感到疑惑:

<?php
if (imagetypes() & IMG_PNG) {
echo "PNG Support is enabled";
}
?> 



这代码是什么意思?
imagetypes() 返回 IMG_PNG IMG_GIF | IMG_JPG | IMG_PNG
& 是不是要改成== ?
这个& 在这里是什么意思?

===========================================================

其实这是一个有趣的问题,但好像并没有多少资料可供借鉴。大部分教程或者资料也只是循规蹈矩的进行类似代码的引用而已。

imagetypes() & IMG_PNG  是按位与的简便判断方式来判断 IMG_PNG 是否属于 imagetypes() 结果内从而判断 PHP 所支持的图像格式。但这种判断可不是如这位网友所疑惑的为什么不用 == 运算符。

其实PHP预定义了这些: IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP| IMG_XPM 常量

<?php

echo IMG_GIF;    //输出1
echo IMG_JPG;    //输出2
echo IMG_PNG;    //输出4
echo IMG_WBMP;    //输出8
echo IMG_XPM;    //输出16

?>

 

1 2 4 8 16 ... 是一个很特殊的数字序列,在二进制下,这些数字完全没有重叠,可以有多种组合。
如果系统只支持 IMG_GIF 与 IMG_JPG ,那么我们就记录 3(1+2) 这个数据即可,而没必要记录1,2。同理,如果系统支持IMG_GIF|IMG_JPG|IMG_PNG ,那么系统将记录 7(1+2+4) 这个数据,依次可以类推。

 

执行一下:
echo imagetypes();
一般情况下输出会是 15 ,所以你的 PHP 系统支持的就是 IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP 这么几个组合(1+2+4+8=15)
所以可以通过 (imagetypes() & IMG_PNG) 来判定是否支持 IMG_PNG ,当然这其中有个还原的过程。

PHP 中还有很多地方使用到了这种方式,有心人可以研究一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值