Doc #63832 [Com]: Doc don't fully cover constructor inheritance
| From: | mail+php at requinix dot net | Date: | Tue, 01 Jan 2013 00:08:01 +0000 |
| Subject: | Doc #63832 [Com]: Doc don't fully cover constructor inheritance | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-9337@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=63832&edit=1
ID: 63832
Comment by: mail+php at requinix dot net
Reported by: jschoett at gmail dot com
Summary: Doc don't fully cover constructor inheritance
Status: Open
Type: Documentation Problem
Package: Documentation problem
Operating System: Doc problem
PHP Version: 5.4.10
Block user comment: N
Private report: N
New Comment:
It's not so much that the child would inherit the constructor as it would
inherit the parent's "__construct" method (if it's public or protected).
There's
a subtle difference there: the constructor is not ipso facto special that way,
it's just that PHP looks for a method with that name.
Considering the importance of a constructor and how it's used I think it's worth
mentioning that it obeys the normal method inheritance rules.
Did you know you can submit changes to the online documentation? Look for the
edit link in the top-right corner of manual pages.
"oop5.decon: spelling out that ctors and dtors can be inherited (bug #63832)"
http://edit.php.net/?patchID=796&project=PHP
Previous Comments:
------------------------------------------------------------------------
[2013-01-01 00:08:01] mail+php at requinix dot net
It's not so much that the child would inherit the constructor as it would
inherit the parent's "__construct" method (if it's public or protected).
There's
a subtle difference there: the constructor is not ipso facto special that way,
it's just that PHP looks for a method with that name.
Considering the importance of a constructor and how it's used I think it's worth
mentioning that it obeys the normal method inheritance rules.
Did you know you can submit changes to the online documentation? Look for the
edit link in the top-right corner of manual pages.
"oop5.decon: spelling out that ctors and dtors can be inherited (bug #63832)"
http://edit.php.net/?patchID=796&project=PHP
------------------------------------------------------------------------
[2012-12-27 09:17:24] jschoett at gmail dot com
just title adapted.
------------------------------------------------------------------------
[2012-12-21 21:03:37] jschoett at gmail dot com
Description:
------------
---
From manual page: http://www.php.net/language.oop5.decon
---
I can not find a definite statement on this:
"The child class inherits the constructor of the base class, iff the child class
does not explicitly define an own constructor."
The documentation do not cover this with:
"Note: Parent constructors are not called implicitly if the child class defines a
constructor"
In addition, since this is an significant difference to e.g. Java, it should be
documented
Test script:
---------------
Snippet to validate this statement (I know you already know the result):
<?php
class A {
private $x = null;
function __construct($x) {
$this->x = $x;
}
}
class B extends A { }
$b1 = new B(); // Warning: Missing argument 1 for A::__construct()
$b2 = new B(1);
var_dump($b1); // Notice: Undefined variable: x
var_dump($b2);
?>
Expected result:
----------------
Same as actual, but I wan't it to be documented :)
Actual result:
--------------
Warning: Missing argument 1 for A::__construct(), called in path\testoutput.php on
line 28 and defined in path\testoutput.php on line 21
Notice: Undefined variable: x in path\testoutput.php on line 22
object(B)#1 (1) { ["x":"A":private]=> NULL } object(B)#2 (1) {
["x":"A":private]=>
int(1) }
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=63832&edit=1