当年话下
运行测试。 string coerce: 7.42296099663 string cast: 8.05654597282 string fail coerce: 7.14159703255 string fail cast: 7.87444186211此测试对每个方案都运行了10,000,000次。:-)强制是 0 + "123"正在投射 (integer)"123"我认为Co-ercion快一点。哦,尝试0 + array('123')是PHP中的致命错误。您可能希望代码检查提供的值的类型。我的测试代码如下。function test_string_coerce($s) { return 0 + $s;}function test_string_cast($s) { return (integer)$s;}$iter = 10000000;print "-- running each text $iter times.\n";// string co-erce$string_coerce = new Timer;$string_coerce->Start();print "String Coerce test\n";for( $i = 0; $i < $iter ; $i++ ) { test_string_coerce('123');}$string_coerce->Stop();// string cast$string_cast = new Timer;$string_cast->Start();print "String Cast test\n";for( $i = 0; $i < $iter ; $i++ ) { test_string_cast('123');}$string_cast->Stop();// string co-erce fail.$string_coerce_fail = new Timer;$string_coerce_fail->Start();print "String Coerce fail test\n";for( $i = 0; $i < $iter ; $i++ ) { test_string_coerce('hello');}$string_coerce_fail->Stop();// string cast fail$string_cast_fail = new Timer;$string_cast_fail->Start();print "String Cast fail test\n";for( $i = 0; $i < $iter ; $i++ ) { test_string_cast('hello');}$string_cast_fail->Stop();// -----------------print "\n";print "string coerce: ".$string_coerce->Elapsed()."\n";print "string cast: ".$string_cast->Elapsed()."\n";print "string fail coerce: ".$string_coerce_fail->Elapsed()."\n";print "string fail cast: ".$string_cast_fail->Elapsed()."\n";class Timer { var $ticking = null; var $started_at = false; var $elapsed = 0; function Timer() { $this->ticking = null; } function Start() { $this->ticking = true; $this->started_at = microtime(TRUE); } function Stop() { if( $this->ticking ) $this->elapsed = microtime(TRUE) - $this->started_at; $this->ticking = false; } function Elapsed() { switch( $this->ticking ) { case true: return "Still Running"; case false: return $this->elapsed; case null: return "Not Started"; } }}