rfc:namespaces-for-internal-classes

Request for Comments: Namespaces for internal classes

  • Version: 0.1
  • Date: 2008-03-06
  • Author: Lars Strojny lstrojny@php.net
  • 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:

  • RecursiveIterator
  • RecursiveIteratorIterator
  • RecursiveRegexIterator
  • RegexIterator
  • RuntimeException
  • SeekableIterator
  • SimpleXMLIterator
  • SplFileInfo
  • SplFileObject
  • SplObjectStorage
  • SplObserver

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
rfc/namespaces-for-internal-classes.txt · Last modified: 2013/02/21 04:08 by tyrael