php spl 链表,PHP SPL 数据结构笔记摘要 - spl

9c98fe03383ffeca78ca12f3181f2137.png

...写PHP的autoLoad自动加载机制,但是目前的框架中用的却是SPL autoload机制。

什么是spl autoload?spl autolaod机制是什么?

SPL autoload机制的实现是通过将函数指针autoload_func指向自己实现的具有自动装载功能的函数来实现的...

php SPL(Standard PHP Library) 主要用到的数据结构有:双向链表(SplDoublyLinkedLis),栈(SplStack),队列(SplQueue),堆(SplHeap),大根堆(SplMaxHeap),小根堆(SplMinHeap), 优先级队列(SplPriorityQueue),固定数组(SplFixedArray),对象存储(SplStorageObject)。

SplDoublyLinkedList

数据结构:(c代码参考PHP7.0.0)

typedef struct _spl_ptr_llist_element {

struct _spl_ptr_llist_element *prev;

struct _spl_ptr_llist_element *next;

int rc; // 引用次数

void *data; // 数据类型

} spl_ptr_llist_element;

typedef struct _spl_ptr_llist {

spl_ptr_llist_element *head;

spl_ptr_llist_element *tail;

spl_ptr_llist_dtor_func dtor; // 删除元素 引用-1

spl_ptr_llist_ctor_func ctor; // 创建元素 引用+1

int count; // 元素个数

} spl_ptr_llist;

struct _spl_dllist_object {

zend_object std;

spl_ptr_llist *llist;

int traverse_position;

spl_ptr_llist_element *traverse_pointer;

zval *retval;

int flags;

zend_function *fptr_offset_get;

zend_function *fptr_offset_set;

zend_function *fptr_offset_has;

zend_function *fptr_offset_del;

zend_function *fptr_count;

zend_class_entry *ce_get_iterator;

HashTable *debug_info;

};双向链表

SplDoublyLinkedList implements Iterator , ArrayAccess , Countable {

/* 方法 */

public __construct ( void )

public void add ( mixed $index , mixed $newval )

public mixed bottom ( void )

public int count ( void )

public mixed current ( void )

public int getIteratorMode ( void )

public bool isEmpty ( void )

public mixed key ( void )

public void next ( void )

public bool offsetExists ( mixed $index )

public mixed offsetGet ( mixed $index )

public void offsetSet ( mixed $index , mixed $newval )

public void offsetUnset ( mixed $index )

public mixed pop ( void )

public void prev ( void )

public void push ( mixed $value )

public void rewind ( void )

public string serialize ( void )

public void setIteratorMode ( int $mode )

public mixed shift ( void ) // 删除第一个元素

public mixed top ( void )

public void unserialize ( string $serialized )

public void unshift ( mixed $value ) //将value插入的第一个元素,原来的第一个元素不删除

public bool valid ( void )

}

需要注意的是:

add 是5.5+版本添加的函数,其它都是5.3+

从数据结构中可以看出,虽然许多函数中都包含有直接索引第index 个元素,如果不在范围则抛出OutOfRangeException异常,实际实现时时间复杂度为O(n)。

具体函数详细可参考php官方手册

以上就介绍了PHP SPL 数据结构笔记摘要,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

...写PHP的autoLoad自动加载机制,但是目前的框架中用的却是SPL autoload机制。

什么是spl autoload?spl autolaod机制是什么?

SPL autoload机制的实现是通过将函数指针autoload_func指向自己实现的具有自动装载功能的函数来实现的...

PHP SPL标准库中提供了一些函数用来处理如自动加载、迭代器处理等。

spl_autoload_extensions()添加spl_autoload()可加载的文件扩展名

spl_autoload_register()注册函数到SPL __autoload函数栈中。

代码如下:

/*test1.

php中spl_autoload详解,spl_autoload详解

SPL有两个不同的函数 spl_autoload, spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动加载机制。

spl_autoload 是SPL实现的默认的自动加载函数,

spl_autoload_register(PHP 5 >= 5.1.2)spl_autoload_register — 注册__autoload()函数说明bool spl_autoload_register ([ callback $autoload_function ] )将函数注册到SPL

在学习php的autoload的机制的时候,发现目前都使用了spl_autoload_register()函数来实现自动加载类,但在查阅资料的过程中,发现了spl_autload()这个函数,在php官方手册中,对该函数的解释是:

__autoload()函数的...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值