Table of Contents

Request for Comments: Namespaces for internal classes

Introduction

This RFC discusses the transition to real namespaces for internal classes in e.g. ext/spl.

Why should we use namespaces for internal classes?

Currently internal classes are inconsistently named. Just take a look at SPL:

Some of the classes in ext/spl are prefixed with “Spl”, some are not. To avoid naming collisions and as a structural element, namespaces were introduced in PHP 5.3. This gives us a chance to move all the Spl-classes in appropriate namespaces. Take a look at the following transitions:

List of renamed classes

Array

Current name New name
ArrayObject Spl::Array::Object
SplFastArray Spl::Array::Fast

Iterators

Current name New name
AppendIterator Spl::Iterator::Append
ArrayIterator Spl::Iterator::Array
CachingIterator Spl::Iterator::Caching
DirectoryIterator Spl::Iterator::Directory
EmptyIterator Spl::Iterator::Empty
FilesystemIterator Spl::Iterator::Filesystem
FilterIterator Spl::Iterator::Filter
GlobIterator Spl::Iterator::Glob
InfiniteIterator Spl::Iterator::Infinite
IteratorIterator Spl::Iterator::Iterator
LimitIterator Spl::Iterator::Limit
RegexIterator Spl::Iterator::Regex
SeekableIterator Spl::Iterator::Seekable
SimpleXMLIterator Spl::Iterator::SimpleXML
ParentIterator Spl::iterator::Parent
NoRewindIterator Spl::Iterator::NoRewind
OuterIterator Spl::Iterator::Outer
RecursiveArrayIterator Spl::Iterator::Recursive::Array
RecursiveCachingIterator Spl::iterator::Recursive::Caching
RecursiveDirectoryIterator Spl::Iterator::Recursive::Directory
RecursiveFilterIterator Spl::Iterator::Recursive::Filter
RecursiveIterator Spl::Iterator::Recursive::Recursive
RecursiveIteratorIterator Spl::Iterator::Recursive::Iterator
RecursiveRegexIterator Spl::Iterator::Recursive::Regex

Lists

Current name New name
SplDoublyLinkedList Spl::List::DoublyLinked
SplQueue Spl::List::Queue
SplStack Spl::List::Stack
SplHeap Spl::List::Heap
SplMinHeap Spl::List::MinHeap
SplMaxHeap Spl::List::MaxHeap
SplPriorityQueue Spl::List::PriorityQueue
SplObjectStorage Spl::List::ObjectStorage

Exceptions

Current name New name
BadFunctionCallException Spl::Exception::BadFunctionCall
BadMethodCallException Spl::Exception::BadMethodCall
DomainException Spl::Exception::Domain
InvalidArgumentException Spl::Exception::InvalidArgument
LengthException Spl::Exception::Length
RangeException Spl::Exception::Range
RuntimeException Spl::Exception::Runtime
LogicException Spl::Exception::Logic
OutOfBoundsException Spl::Exception::OutOfBounds
OutOfRangeException Spl::Exception::OutOfRange
OverflowException Spl::Exception::Overflow
UnderflowException Spl::Exception::UnderflowException
UnexpectedValueException Spl::Exception::UnexpectedValue
Current name New name
SplFileInfo Spl::File::Info
SplFileObject Spl::File::Object
SplTempFileObject Spl::File::TempFile

Observer interfaces

Current name New name
SplObserver Spl::Observer::Observer
SplSubject Spl::Observer::Subject

Misc

Current name New name
Countable Spl::Countable

Backwards compatibility and other constraints