php - Splstack 是如何工作的?为什么?

标签 php spl

<?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/

相关文章:

PHP 自动加载器类与程序自动加载器函数?

Informix 11.70.FC8GE - 如何使用 SELECT 将 LIST 数据类型传递到 SPL

php - SPL 文件信息 : get filename without extension

php - 一次性将 MySQL 表行导出为单个文件(特别是 JSON)

PHP:如何创建 unicode 文件名

PHP-CI : How to Combine 2 arrays from few tables in databases?

PHP 如何对 arrayObject 进行 array_unshift

javascript - 验证依赖于复选框 JS 的多个文本字段

php - MySQL表中的多个连接

php - 使用 PHP RecursiveTreeIterator 构建日志读取器