Deprecate PHP Short open tagsというRFCが投票フェーズに入りました。
投票期間は2019/04/10から2019/04/24、採択には投票数の2/3+1の賛成が必要です。
Deprecate PHP Short open tags
Short open tagsとは
PHPの開始を示すタグは<?php
、もしくは<?=
です。
後者は<?php echo
とほぼ同じであり、今回のRFCでは一切影響を受けません。
php.iniの設定でshort_open_tagを有効にすると、PHPの開始タグを<?
と省略して書けるようになります。
// 通常
<?php
echo 'hoge';
// short_open_tag=1ならこう書ける
<?
echo 'hoge';
Short open tagsのデフォルト値
PHP7.3時点では1
、つまり初期設定で有効になっている。
ただし、多くの実装系(XAMPPとか)では0と無効にされているようだ。
Short open tagsの問題点
うっかりXMLをコピペすると死ぬ。
<?xml version="1.0"?>
<?php
echo 'XMLの中身';
このコードは、short_open_tagが有効な場合syntax errorのE_PARSEになります。
short_open_tagが無効であれば普通にXMLが出力されます。
このように、設定によって動作が根本的に変わってしまうので、あまりよろしくありません。
Remove alternative PHP tags
PHP5時代は、これ以外にも<%
や<script language="php">
といった記述でPHPに入ることが可能でした。
それらはPHP7移行の際に、Remove alternative PHP tagsのRFCで削除されました。
が、なぜか<?
だけは残ったままでした。
RFC
<?
をPHP7.4でDeprecatedにし、PHP8で削除しよう、という提案です。
これによってPHPの開始タグは<?php
と<?=
の2種類だけになり、とてもすっきりします。
プルリク
PHP7.4ではshort_open_tagのデフォルト値を1から0に変更します。
また有効にするとDirective 'short_open_tag' is deprecated
のE_DEPRECATEDが発生するようになります。
PHP8では設定項目そのものが削除され、有効にすることができなくなります。
internal
「え?short_open_tag削除して常に有効になるんじゃないの?」
「わざわざ削除するメリットが見当たらない」
「今PHP7で書いてる人はほぼ影響受けないだろうけど、未だにPHP5の人はアプデの障壁がさらに高くなるよ。」
「Facebookでアンケ取ってみたら96%が削除賛成だったよ」
「<?=
が削除されないんだったらかまわない」
投票
2019/04/12時点では、PHP7.4でのDeprecateは賛成17反対9で、このままだと却下されます。
PHP8でのRemoveは賛成19反対9で、このままだと受理されます。
感想
PHP7.4でのDeprecateが却下され、かつPHP8でのRemoveが受理されると、それまで使えてたのにPHP8でいきなり削除ってなるんだけどどうなんだろう。
その場合はPHP8でDeprecateになるのかな?
個人的には<?
は全く使ってないので消してもらって全くかまわないんだけど、その結果vendor配下からDeprecatedが大量発生ってなったりすると困りますね。
かつてPEARでもAssigning the return value of new by reference is deprecated
が湧き潰しできず死ぬという事件がありましたが、それの再来にならないことを祈りましょう。