<?php
$stack = new SplStack();
$stack->add(0, 'one');
$stack->add(1, 'two');
$stack->add(2, '2015');
echo "<pre>";
print_r($stack);
当我运行此代码时,所有项目都存储在名为 dllist
的属性中(我希望),这是预期的结果。
SplStack Object
(
[flags:SplDoublyLinkedList:private] => 6
[dllist:SplDoublyLinkedList:private] => Array
(
[0] => one
[1] => two
[2] => 2015
)
)
但是我运行下面的代码,工作方式与上面的代码相同,为什么当我尝试时,$stack[] = 'one';
为什么没有收到错误? php 如何知道 $stack[] = 'one';
应该存储在 dllist
中?
<?php
$stack = new SplStack();
$stack[] = 'one';
$stack[] = 2015;
$stack[] = 'two';
echo "<pre>";
print_r($stack);
我预计会出现一些像这样的错误:
<?php
$int = 2015;
$int[] = 300; //Warning: Cannot use a scalar value as an array in
$str = 'foo';
$str[] = 'foo'; //Fatal error: [] operator not supported for strings in
$obj = new stdClass();
$obj[] = 'new one'; //Fatal error: Cannot use object of type stdClass as array in
最佳答案
SplStack 实现了 ArrayAccess 接口(interface),使得 SplStack 类具有数组功能: http://php.net/manual/en/class.arrayaccess.php
关于php - Splstack 是如何工作的?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33236575/