それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

phpに於ける StringIO

phpに於ける StringIO

php にはStringIOが無いと存じます。無いのではなく、必要がないのです。

stringio を実現する

$string_io = new \SplFileObject('php://memory','w+');

これだけです。SplFileObjectが最強です。

もしくは、fopen

$fp = fopen('php://memory','w+');

読み込み書き込み

SplFileObject がストリームのように扱えます。

$string_io = new \SplFileObject('php://memory','w+');
$string_io->fwrite("aaa\n");
$string_io->fwrite("bbb\n");
$string_io->fwrite("ccc\n");
$string_io->rewind();
foreach( $string_io as $line){
   var_dump( trim($line));
}

ただし、trim が必要な点。 fwrite と f-XX が冗長な点。また SplFileObject 自身が大量に継承メソッドを持ち、自分自身がIterable であり、ちょっとわかりにくいんじゃないかと思います。

組み込みで使えるし require 不要でいつでも使えるので便利ではあるのですが。

SplFileObjectというクラス名は、ファイルを連想させコードリーディングの障害になりかねない。そのため変数名を$string_io と意図を明確に書くべきだとおもう。

SplFileObject よりも fopen で php://memory を使ってみたらどうなるか、実装例も作ってみたが、SplFileObjectで十分だと思う。

参考資料

https://www.php.net/manual/en/class.splfileobject.php