关于imagetype() & IMG

xiaoxiao2021-02-28  132

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

[php] view plain copy <?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] view plain copy <?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 中还有很多地方使用到了这种方式,有心人可以研究一下。

转载请注明原文地址: https://www.6miu.com/read-27772.html

最新回复(0)