nazolabo

フリーランスのWebエンジニアが近況や思ったことを発信しています。

PHP5.4 alpha1を使ってみた その2(変更点1)

前回: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は生き残ってます。

まだまだ続く(予定)