忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/22 18:32 |
Zend Framework2.2.0 Zend\Stdlib\SplStack / SplQueue
ZF2では少し便利なSPLの拡張があります。
<?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


2013/05/29 22:41 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP5.4.7 PHPでarray_flatten関数のパフォーマンス測定の続き | HOME | Zend Framework2.1.4 Zend\Text\Figlet>>
忍者ブログ[PR]