古いエクステンションがざっくり削除されますよ

[Cleaning up unmaintained extensions](https://wiki.php.net/rfc/umaintained_extensions)というRFCが2018/06/26に可決されました。
もはやメンテされていない古いコア拡張をざっくり削除するという、PHPとしては珍しい削減方向のRFCです。
これらは今後PHP本体からPECLへと移動になり、マニュアルには[メンテナンスされておらず開発が止まっています](http://php.net/manual/ja/intro.apc.php)のレッテルが貼られることになります。

いまのところPHP7.3で導入する予定ってなってるけど、本当に7.3で入るのでしょうか？

# Cleaning up unmaintained extensions

## enchant

[Enchantスペリングライブラリ](http://php.net/manual/ja/book.enchant.php)は、[Enchant](https://abiword.github.io/enchant/)をPHPから呼び出す関数です。
Enchantは各種スペルチェッカーに統一的なインターフェイスでアクセスできるというラッパーソフトウェアです。
便利そうな気はしますが、しかし現代のスペルチェッカーはリアルタイムにチェックできてこそなんぼの世界なので、PHPから呼び出す必要性は皆無ですね。

現在の対応ソフトウェアは[Hunspell](https://en.wikipedia.org/wiki/Hunspell)、[Aspell](https://ja.wikipedia.org/wiki/GNU_Aspell)、[Hspell](http://hspell.ivrix.org.il/)、[Zemberek](https://github.com/ahmetaa/zemberek-nlp)、[Voikko](https://voikko.puimula.org/)、[AppleSpell](https://appdrill.net/62067/disable-spell-check.html)の6種です。
自然言語よりプログラミング言語のチェッカーを呼び出せるようにした方が生き残れそう。

## ftp

削除対象の中でおそらく最も影響の大きそうな拡張。
[FTP](http://php.net/manual/ja/book.ftp.php)はFTP接続関連の関数を提供します。
[ftp_connect](http://php.net/manual/ja/function.ftp-connect.php)を使ったことのある人も多いはず。

今後は[FTPコンテキストオプション](http://php.net/manual/ja/context.ftp.php)や[cURL](http://php.net/manual/ja/book.curl.php)を使うことになるでしょう。

## gettext

[Gettext](http://php.net/manual/ja/book.gettext.php)は[GNU gettext](https://www.gnu.org/software/gettext/manual/gettext.html)を実装するライブラリで、PHPで最もググラビリティの低い関数[_()](http://php.net/manual/ja/function.gettext.php)を含みます。
国際化を提供するのですが、あまりに[使い方が面倒に過ぎる](https://tohokuaiki.hateblo.jp/entry/2017/03/14/PHP%E3%81%A7gettext%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AE%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85%E3%81%A8%E3%81%84%E3%81%86%E3%81%8B%E3%80%81setlocale%E3%81%AE%E7%BD%A0)。
特にlocaleに影響されるのが厄介なので、わざわざ地雷を踏むより[自力で書いた方がいい](https://qiita.com/tadsan/items/24cf40f067295df2ffb8)でしょう。

```php
	require_once('language/string_' . \Teto\HTTP\AcceptLanguage::get()[0] . '.php');
```

## pdo_odbc

[PDO_ODBCドライバ](http://php.net/manual/ja/ref.pdo-odbc.php)はPDOドライバのひとつで、ODBCに対応したものです。
[ODBC](https://ja.wikipedia.org/wiki/Open_Database_Connectivity)は主にRDBMSに対して汎用的にアクセスするための共通インターフェイスということなのですが、まあそうそう上手くいくわけもなく、大抵は結局DBに特化した書き方が必要になります。

これによって[IBM Db2](https://www.ibm.com/analytics/us/en/db2/)、[unixODBC](http://www.unixodbc.org/)にPDO接続できなくなります。
[PDOではないODBC関数](http://php.net/manual/ja/book.uodbc.php)は生き残ってるので今後はそちらを使うことになるでしょう。

と思ったら[上のデータベースと接続する際には ODBC は使用しません](http://php.net/manual/ja/intro.uodbc.php)とか書いてあった。

## readline

[Readline](http://php.net/manual/ja/book.readline.php)は、PHPから[GNU Readline](https://tiswww.case.edu/php/chet/readline/rltop.html)を呼び出す関数です。
こいつはPHPで[対話型シェル](http://php.net/manual/ja/features.commandline.interactive.php)ができるというものですが、さすがにそれをPHPでやる必要はないだろうと思いますね。

## pspell

[Pspell](http://php.net/manual/ja/book.pspell.php)はスペルチェッカーです。
[概要](http://php.net/manual/ja/intro.pspell.php)には何も書かれてないのですが、公式サイトへのリンクが[aspell.net](http://aspell.net/)なので実体はAspellっぽいです。
[MySQLi](http://php.net/manual/ja/book.mysqli.php)と[PDO_MYSQL](http://php.net/manual/ja/ref.pdo-mysql.php)みたいなものでしょうか。

## sysvmsg / sysvsem / sysvshm

いずれも[セマフォ関数](http://php.net/manual/ja/book.sem.php)にまとめられていて、順に[SystemV メッセージ](https://docs.oracle.com/cd/E19683-01/816-3977/svipc-23310/index.html)、[SystemV セマフォ](https://docs.oracle.com/cd/E19683-01/817-3495/svipc-65382/index.html)、[SystemV 共有メモリ](https://docs.oracle.com/cd/E19683-01/816-3977/svipc-41256/index.html)への対応です。
正直PHPからどのように使うべきなのかわかりません。

## wddx

[WDDX](http://php.net/manual/ja/book.wddx.php)は[言語をまたいだデータ交換機能](https://ja.wikipedia.org/wiki/WDDX)です。
WDDXはXMLなうえWDDX関数も使い勝手が悪く、時代が下るにつれYAML、REST、JSONとどんどん簡易的な形式に変化してきました。
もはや余程の理由でもない限りjson_encode/decodeで事足りるので、わざわざWDDXを使う意義は皆無でしょう。

何故か[Sessionシリアライザ](http://php.net/manual/ja/session.configuration.php#ini.session.serialize-handler)に使えるので、うっかり使ってしまっている場合は切り替え時に全セッションデータが消えることでしょう。


# 感想

FTP以外はぼ影響なさそう。

PHPの場合、他言語なら外部ライブラリとして提供されるような機能がコアに入ってることも多いので、仕様の変更も色々手続きがあって大変ですね。

あと[マニュアル](http://php.net/manual/ja/funcref.php)には[コア機能](http://php.net/manual/ja/book.session.php)も[バンドルモジュール](http://php.net/manual/ja/book.json.php)も[PECLに追放されたやつ](http://php.net/manual/ja/book.hwapi.php)も[削除された機能](http://php.net/manual/ja/book.mime-magic.php)も分け隔て無く掲載されていて分け隔て無さすぎるので、もう少し整理した方がいい気がします。
だってPECLってgemやらpipみたいなものだし、公式マニュアルにそれらのドキュメントが載るって普通は無いでしょう。