首页 » Web前端 » php数值叠加技巧_若安在轨范中实现属性叠加

php数值叠加技巧_若安在轨范中实现属性叠加

访客 2024-11-30 0

扫一扫用手机浏览

文章目录 [+]

const SPEEDX_STYLE_W3C = 1; //表示支持这一属性或支持这一属性值的浏览器都是采取标准格式,即不带浏览器前缀的书写办法;

const SPEEDX_STYLE_MOZ = 2; //火狐浏览器内核(-moz-):表示支持这一属性或属性值的火狐浏览器在书写格式上要带\"大众-moz-\"大众前缀;

php数值叠加技巧_若安在轨范中实现属性叠加

const SPEEDX_STYLE_WEBKIT = 4; //Chrome和Safari浏览器内核:表示支持这一属性或属性值的浏览器在CSS书写格式上要带\"大众-webkit-\"大众前缀;

php数值叠加技巧_若安在轨范中实现属性叠加
(图片来自网络侵删)

const SPEEDX_STYLE_MS = 8; //IE浏览器内核:IE支持的CSS特性,要加\"大众-ms-\"大众前缀

const SPEEDX_STYLE_O = 16; //Opera浏览器内核:对付兼容部分Opera浏览器,CSS特性前要加\"大众-o-\公众前缀

const SPEEDX_STYLE_ALL = 31; //所有兼容模式,为了兼容大部分主流浏览器的不同版本,要加上上面所有的前缀。

为什么我们定义这样的常量都因此2的指数形式定义。
缘故原由很大略,属性叠加后还能还原。
我们末了定义的一个常量SPEEDX_STYLE_ALL是前面几个常量的总和,表示全部支持以上属性。
那么如何拆解这个值还原成各个属性值呢。
方法有很多,但是我们要找到效率和性能最高的那个方法。
我们知道一个以2为基数幂次方(X)的二进制表示是第1位为1,别的为0,而这个数的X-1的二进制表示则是第1位为0,其它位则为1,如果我们将这两个数用位运算相与,则得到的结果必定为0,否则必定大与0。
以这个特性,我们就能判断数X是不是2的幂次方。
如下所示:

$dec = (($num & ($num - 1)) === 0) ? true : false;

这样当$dec为true时,$num为2的幂次方。
根据这个思路,数值31是由哪些2的指数幂叠加的呢,我们只要逐次递减循环判断就可以。
当判断到16时,就可以将16存储,再用前一次循环的最大值减去这个值,即31 - 16 = 15,再用15连续递减循环判断,以此类推就能得到所有的原始叠加值。
其完全的实当代码如下:

/

二进制分解,用于属性叠加

/

function decomposeBinary($number){

$numList = [];

if(!is_int($number)) return $numList;

$max = $number;

while($max > 0){

if($max === 1){

$numList[] = 1;

$max = 0;

break;

}

if(($number & ($number - 1)) === 0 ? true : false){

$numList[] = $number;

$max = $max - $number;

$number = $max;

}else{

$number--;

}

}

return $numList;

}

现在,用这个函数就可以拆解到我们所须要的属性了,当我们这样做时:

$attrList = decomposeBinary(SPEEDX_STYLE_ALL);

var_dump($attrList),就会得到我们想要的属性数组了。

再根据这个属性列表,我们写一个前面所提到的输出不同浏览器所支持的样式属性时,就很随意马虎做了。

根据得到的数据,我们做相应的前缀添加。
如下所示:

$brw = decomposeBinary($pa);

$key = [];

foreach($brw as $val){

if($val === SPEEDX_STYLE_W3C)$key[] = \"大众 \公众;

if($val === SPEEDX_STYLE_MOZ)$key[] = \"大众moz\"大众;

if($val === SPEEDX_STYLE_WEBKIT)$key[] = \公众webkit\"大众;

if($val === SPEEDX_STYLE_MS)$key[] = \"大众ms\公众;

if($val === SPEEDX_STYLE_O)$key[] = \"大众o\公众;

}

这样,$key里便是所有浏览器对应的样式属性支持的前缀列表了。
我们来写一个大略的函数:

function echocss($attr,$brw){

$brw = decomposeBinary($brw);

$key = [];

foreach($brw as $val){

if($val === SPEEDX_STYLE_W3C)$key[] = \"大众\公众;

if($val === SPEEDX_STYLE_MOZ)$key[] = \"大众-moz-\"大众;

if($val === SPEEDX_STYLE_WEBKIT)$key[] = \公众-webkit-\"大众;

if($val === SPEEDX_STYLE_MS)$key[] = \公众-ms-\公众;

if($val === SPEEDX_STYLE_O)$key[] = \"大众-o-\公众;

}

$_css_attr = \"大众\公众;

foreach($key as $val){

$_css_attr .= $va l. $attr;

}

return$_css_attr;

}

用这个函数我们来测试一下看看能不能得到我们想要的结果:

var_dump(echocss(\公众width:100px;\公众,SPEEDX_STYLE_ALL));

得出的结果如下:

\公众-o-width:100px;-ms-width:100px;-webkit-width:100px;-moz-width:100px;width:100px;\"大众

很完美是不是,

当然,这里所做的只是个示例,其功能并不符合实际需求。

如果真有这方面的需求的朋友们,请关注我的头条号,最近我在写一个speedx小项目,能以php的方法完美实现CSS、js及html的完美功能,并且天生的代码压缩率很高哦。

标签:

相关文章

介绍百度码,技术革新背后的智慧之光

随着科技的飞速发展,互联网技术已经成为我们生活中不可或缺的一部分。而在这个信息爆炸的时代,如何快速、准确地获取信息,成为了人们关注...

Web前端 2025-01-03 阅读1 评论0

介绍皮箱密码,开启神秘之门的钥匙

皮箱,作为日常生活中常见的收纳工具,承载着我们的珍贵物品。面对紧闭的皮箱,许多人却束手无策。如何才能轻松打开皮箱呢?本文将为您揭秘...

Web前端 2025-01-03 阅读1 评论0

介绍盗号器,网络安全的隐忧与应对步骤

随着互联网的快速发展,网络安全问题日益突出。盗号器作为一种非法工具,对网民的个人信息安全构成了严重威胁。本文将深入剖析盗号器的原理...

Web前端 2025-01-03 阅读1 评论0