ZF2では少し便利なSPLの拡張があります。
配列で取り出すメソッド、シリアライズするメソッドが追加されています。
これで便利になったかと思いきや、実はこいつら、全く使いどころがありません。
元々iterator_to_array()で配列に取り出すことが可能でした。
なんでメソッドじゃなくて関数なのかは分かりませんが。
ちなみにtoArray()はiterator_to_array()を使わずforeachで中身を取り出しています。何故か。
で、PHP5.4で素のSPLにserialize()が実装されてしまいました。
さらに困ったことにserialize()の互換性がありません。
つまり、Zend\Stdlib\SplStackとSplQueueを使う必要性が全く無くなってしまったということです。
Zend\Stdlib\SplPriorityQueueについては、何故かまだtoArray()やserialize()が無いので今のところ使い道はありますが、今回のZend\Stdlib\SplStackについては、もはや存在意義が終了したと言っていいでしょう。
では何故紹介した。
<?php require_once('path/to/channel/vendor/autoload.php'); $sample = array(1,2,3,4,5); // キューとスタックの拡張 $queue = new Zend\Stdlib\SplQueue(); $stack = new Zend\Stdlib\SplStack(); foreach($sample as $key=>$val){ $queue->push($val); $stack->push($val); } // 配列に取り出す $array = $queue->toArray(); $array = $stack->toArray(); // シリアライズ $queueSerial = $queue->serialize(); // シリアライズから元に戻す $queue2 = new Zend\Stdlib\SplQueue(); $queue2->unserialize($queueSerial);
配列で取り出すメソッド、シリアライズするメソッドが追加されています。
これで便利になったかと思いきや、実はこいつら、全く使いどころがありません。
<?php $sample = array(1,2,3,4,5); // デフォルトのSplQueue $default = new \SplQueue(); foreach($sample as $key=>$val){ $default->push($val); } // iterator_to_arrayで配列に取り出せる $array = iterator_to_array($default); // 実はPHP5.4で素のSPLにserialize()が実装された $defaultSerial = $default->serialize(); $default2 = new \SplQueue(); $default2->unserialize($defaultSerial); // 互換性はない $default2->unserialize($queueSerial); // UnexpectedValueException
元々iterator_to_array()で配列に取り出すことが可能でした。
なんでメソッドじゃなくて関数なのかは分かりませんが。
ちなみにtoArray()はiterator_to_array()を使わずforeachで中身を取り出しています。何故か。
で、PHP5.4で素のSPLにserialize()が実装されてしまいました。
さらに困ったことにserialize()の互換性がありません。
つまり、Zend\Stdlib\SplStackとSplQueueを使う必要性が全く無くなってしまったということです。
Zend\Stdlib\SplPriorityQueueについては、何故かまだtoArray()やserialize()が無いので今のところ使い道はありますが、今回のZend\Stdlib\SplStackについては、もはや存在意義が終了したと言っていいでしょう。
では何故紹介した。
PR