博采众长,精于一技。Live for love, work for dream.

IE中不可遍历的属性

IE的for...in循环存在严重的缺陷,除了性能低下外,有许多属性不可遍历,著名有这三兄弟:constructor ,toString ,valueOf。但实际情况更恐怖。下面是来自火狐官网的测试代码:
var ret = (function(){
var obj = {
constructor : function() { return 0; }
,toString : function() { return "1"; }
,valueOf : function() { return 2; }
,toLocaleString : function() { return "3"; }
,prototype : function() { return "4"; }
,isPrototypeOf : function() { return 5; }
,propertyIsEnumerable : function() { return 6; }
,hasOwnProperty : function() { return 7; }
,length: function() { return 8; }
,unique : function() { return "9" }
};
 
var result = [];
for(var prop in obj) {
result.push(obj[ prop ]());
}
 
return result.join("");
})();

PHP开发迷思(三) – PHP很糟糕?

一直以来,很多Web开发者认为PHP不过只是个Scripting Language ,比不上JSP或是ASP.Net等重量级的专业开发环境。

所以你可以看到他们写的PHP几乎都是把PHP程序代码和HTML混杂在一起,或是跟著书本按表操课,因为他们觉得这种简单的工作只要能够交差了事就行了。

对他们来说: PHP会用就好啦! 真正专业的技术知识应该要从Java 、 C#或是其他正统的语言中学习!

虽然我不意外他们有这样的想法,但我更希望他们能重新认识PHP !

继续阅读 »

PHP开发迷思(二) –网站用MVC有用吗?

在MVC Framework大行其道的今天,还是有一些朋友认为MVC不是那么有用,一来架构太过复杂,二来速度也是个大问题。

他们大概是把MVC当做是一套软件来看了…

醒醒吧,不是Web Framework才叫MVC !

事实上, MVC其实是一种架构观念,只是大部份的Web Framework都用差不多的方式来实施而已。 也就是Controller负责处理Request与Response , Model负责处理Database ,而View就是Template 。 但MVC真的只是这样吗?

要真的了解MVC的观念,我推崇ericsk大师说的一句话: 只要有了API,表现层就可以无限宽广….

继续阅读 »

PHP开发迷思(一) –模板该用PHP还是Smarty ?

这阵子在PTT的PHP版,看到有人说为什么要用Smarty ? PHP其实本身就很好用的模板语言了,何必再多此一举?

身为「 PHP Smarty模板引擎」一书的作者,我对这样的评断其实并没有特别的感觉;因为我认为去争论这种主观的东西并没有太大的意义,因为重点根本不在Smarty到底是不是多此一举。

对我而言,用PHP也好,用Smarty也罢,主要在于我能不能严守业务处理逻辑与资料呈现逻辑的分离;而Smarty只是其中一种工具,它能半强迫地让我远离PHP的诱惑,让我专心去处理我的资料。 只是语法的不一致和第一次执行的效率,常常是Smarty被批评的主因,但只用PHP真的好吗?

继续阅读 »

php crc32 函数的一个问题

php 里面没有 unsigned int 的概念,超过 PHP_INT_MAX 的数用 float 表示。

但是crc32却返回 int32(标准返回uint32)这导致php的int32变量存放不下crc32的返回值。如果要使用crc32值,只要sprintf("%u", crc32($argv[1])),就可以,但是这是字符串形式的,如果要对crc32值做运算,比如加减,那么需要用float表示,$crc32_value = floatval(sprintf("%u", crc32($argv[1]))); 通常情况,这样工作的很好,但是,如果要对$crc32_value取模,问题就来了,$crc32_value 会先转换成int,然后再取模,这根本就是错误的,也就是说,对超过 PHP_INT_MAX 的数取模,在php中,结果是不正确的。

继续阅读 »

返回顶部