Req #46899 [Opn->Csd]: Typed function arguments should allow nulls
Edit report at https://bugs.php.net/bug.php?id=46899&edit=1
ID: 46899
Updated by: nikic@php.net
Reported by: zyss at mail dot zp dot ua
Summary: Typed function arguments should allow nulls
-Status: Open
+Status: Closed
Type: Feature/Change Request
Package: Scripting Engine problem
Operating System: *
PHP Version: 5.2.8
-Assigned To:
+Assigned To: nikic
Block user comment: N
Private report: N
New Comment:
Closing as this is already implemented. At least in PHP 5.3 and higher any typehint with a null
default value can also be called explicitly with null.
See http://codepad.viper-7.com/CHcVzX for a demo.
Previous Comments:
------------------------------------------------------------------------
[2008-12-18 13:41:08] zyss at mail dot zp dot ua
Example in more readable form:
class ExElement extends Exception { };
class Element {
// each element references document for fast access
protected /* Document */ $document;
protected /* Element */ $parent;
function __construct(
Document $document,
Element $parent = null) /* throws ExElement */
{
// is still checked to be valid Document object reference
$this->document = $document;
if ($parent && ($parent->getDocument() != $document))
throw new ExElement("Parent's document doesn't match " .
"Element constructor's argument", 1);
$this->parent = $parent;
}
function getDocument() {
return $this->document;
}
}
------------------------------------------------------------------------
[2008-12-18 13:33:55] zyss at mail dot zp dot ua
Description:
------------
Currently class type can be specified as function argument type, but it is frequently required to
pass null instead of object reference when there is a default argument value set and it is null. In
the following example constructor's $parent argument can be null for the top-level objects, but
current PHP version doesn't allow it to be null forcing to remove type declaration that is very
undesirable:
class ExElement extends Exception { };
class Element {
protected /* Document */ $document; // each element references document for fast access
protected /* Element */ $parent;
function __construct(Document $document, Element $parent = null) /* throws ExElement */ {
$this->document = $document; // is still checked by PHP to be valid Document object
reference
if ($parent && ($parent->getDocument() != $document))
throw new ExElement("Parent's document doesn't match Element
constructor's argument", 1);
$this->parent = $parent;
}
function getDocument() {
return $this->document;
}
}
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=46899&edit=1
Thread (3 messages)