Version: 0.1
Date: 2008-03-06
-
Status: Work in progress
First Published at: none
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:
RecursiveIterator: Spl::Iterator::Recursive
RecursiveIteratorIterator: Spl::Iterator::Recursive::Iterator
RecursiveRegexIterator: Spl::Iterator::Recursive::RegexIterator
RegexIterator: Spl::Iterator::Regex
RuntimeException: Spl::Exception::Runtime
SimpleXMLIterator: Spl::Iterator::SimpleXML
SplObserver: Spl::Observer::Observer
SplSubject: Spl::Observer::Subject
SplFileInfo: Spl::File::Info
SplFileObject: Spl::File::Object
SeekableIterator: Spl::Iterator::Seekable
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
The current names are removed in PHP 6.0
The current names are available as deprecated aliases until their removal
The documentation will be updated to advise the usage of the new naming scheme
The current classes will trigger an E_DEPRECATED warning hinting the new name