====== PHP RFC: DateTimeInterface removal ====== * Version: 0.1 * Date: 2015-07-21 * Author: Marco Pivetta, ocramius@gmail.com * Status: Draft * First Published at: http://wiki.php.net/rfc/drop-datetimeinterface The \DateTimeInterface is an implementation detail of ext/date that should not have been exposed to userland code. The reason for it to be an internal detail is that ext/date does NOT rely on the interface itself, but on internal state of the \DateTime and \DateTimeImmutable implementations, as explained in [[https://github.com/php/php-src/pull/512|Pull request #512]] and [[https://bugs.php.net/bug.php?id=65768|Bug #65768]]. Because of the internal ext/date interactions, PHP 5.5.8 introduced a major BC break by making it [[http://3v4l.org/8GvgO|impossible to implement \DateTimeInterface in userland]]. This sort of behavior is what may become yet another of those quirks in the language that depreciate PHP. ===== Proposal ===== This RFC proposes its removal from PHP 7.0.0 even though it represents a BC break. ===== Alternatives ===== An alternative solution to the currently standing issue is to make ext/date rely on the interface internally, and therefore actually fix [[https://bugs.php.net/bug.php?id=65768|Bug #65768]]. There may not be enough time to do that, though, which is why this proposal is being advanced, rather than a more "elaborate" fix. ===== Backward Incompatible Changes ===== Applications relying on \DateTimeInterface would need to explicitly switch back to checking against \DateTime and \DateTimeImmutable. Software compatible with PHP 5.5.0~5.5.7 and implementing \DateTimeInterface would break anyway. Software checking against \DateTimeInterface via instanceof. ===== Proposed PHP Version(s) ===== PHP 7.0.0 List the proposed PHP versions that the feature will be included in. Use relative versions such as "next PHP 5.x" or "next PHP 5.x.y". ===== RFC Impact ===== ==== To Existing Extensions ==== ext/session ===== Proposed Voting Choices ===== 2/3 majority due to major BC break involvement. ===== Patches and Tests ===== Links to any external patches and tests go here. If there is no patch, make it clear who will create a patch, or whether a volunteer to help with implementation is needed. Make it clear if the patch is intended to be the final patch, or is just a prototype. ===== Implementation ===== None, so far. Joe Watkins told me that he has a patch for it.