前回:http://nazo.hatenablog.com/entry/2011/06/29/000000
前回でインストールが完了したので、次は実際に新機能を試してみます。
変更点:http://www.php.net/releases/NEWS_5_4_0_alpha1.txt
type hintingでscalar値が指定できるのは採用されなかったようです。
break $var;の廃止
$i=2; $j=2; $k=2; while($i--) { while($j --) { echo "test", PHP_EOL; break $k; } }
PHP5.3までだと動きますが、5.4だと
Fatal error: 'break' operator with non-constant operand is no longer supported in php shell code on line 4
となります。
ちなみに定数であれば問題ないです。(break 2;とかはOK)
array_combineの変更
PHP5.3だと
php > var_dump(array_combine(array(), array())); Warning: array_combine(): Both parameters should have at least 1 element in php shell code on line 1 bool(false)
ですが、PHP5.4では、
php > var_dump(array_combine(array(), array())); array(0) { }
となります。
preg_match_allの変更
第三引数がoptionalになりました。
PHP5.3
php > preg_match_all("/a/", "aaa"); Warning: preg_match_all() expects at least 3 parameters, 2 given in php shell code on line 1
PHP5.4
php > preg_match_all("/a/", "aaa"); php >
null等に対するObjectとしての扱いの変更
null、空文字列、falseの変数に対して、オブジェクトのプロパティ代入のような操作をすると、従来は勝手にstdClassのオブジェクトになりましたが、今回はwarningになるようになりました。(stdClassのオブジェクトとしては動作します)
PHP5.3
php > $null->hoge = 1; php >
PHP5.4
php > $null->hoge = 1; Warning: Creating default object from empty value in php shell code on line 1 php > var_dump($null); object(stdClass)#1 (1) { ["hoge"]=> int(1) }
<?=が常に有効に
<?でPHPコードを始めるshort_open_tagsは、iniで設定しない限り有効になりませんでしたが、<?=の表記(echoする)に限り、常に有効になりました。
register_globals、safe_modeなどの廃止
deprecatedじゃなくて根本的に使えなくなっています。定義するとFatalで即終了します。(Offで定義してある分には問題ない)
ちなみにmagic_quotes_gpcは生き残ってます。
まだまだ続く(予定)