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