はじめに
PHPのSPL(Standard PHP Library)には、配列やリンクリストといった基本的なデータ構造をクラスとして利用できる仕組みが用意されています。その中でもSplStackは、後入れ先出し(LIFO)構造を簡単に実装できる便利なクラスです。
PHP8上級試験では、SPLのコレクション系クラスが出題されることがあります。特に foreach
を使った走査順序や、SplDoublyLinkedList
との継承関係を理解していないと、思わぬ誤答につながる可能性があります。
この記事では、SplStackの基本動作と、試験でも引っかかりやすい foreachでの取り出し順序 について詳しく解説します。
目次
SplStack機能の解説
<?php
declare(strict_types=1);
error_reporting(-1);
$stack = new SplStack();
$stack->push(1);
$stack->push('2nd');
$stack->push(333);
foreach ($stack as $v) {
echo "{$v} ";
}
実行結果
333 2nd 1
解説
SplStackとは?
SplStack
は、SPL(Standard PHP Library)で提供される スタック構造(LIFO: Last-In First-Out)を表すクラスです。push()
で要素を積み、pop()
で最後に積んだ要素から順に取り出します。
push() の動作
コードでは以下の順に push()
しています。
1
'2nd'
333
内部状態(下が底):
[底] 1 → '2nd' → 333 [頂上]
foreach の挙動に注意
SplStackをforeachで回すと、頂上(最後に push した要素)から順に値が取り出されます。
今回の結果:
333 → '2nd' → 1
これは、配列の foreach異なり、逆順になる点がポイントです。
試験対策ポイント(PHP8上級試験向け)
SplStack
はSplDoublyLinkedList
を継承foreach
の初期ポインタは末尾(頂上)- 型指定はなく、異なる型も混在可能
push
/pop
はLIFO、unshift
/shift
でFIFO動作も可能
まとめ
SplStack
はLIFO構造を持つクラスforeach
は頂上から取り出すため逆順になる- PHP8上級試験では、順序やSPLクラスの継承関係が問われやすい