Bug->Doc #68512 [Opn->Ver]: DOMDocument specific properties in child class not used.

From: Date: Fri, 12 Mar 2021 17:45:31 +0000
Subject: Bug->Doc #68512 [Opn->Ver]: DOMDocument specific properties in child class not used.
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-18630@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=68512&edit=1

 ID:                 68512
 Updated by:         cmb@php.net
 Reported by:        arjen at react dot com
 Summary:            DOMDocument specific properties in child class not
                     used.
-Status:             Open
+Status:             Verified
-Type:               Bug
+Type:               Documentation Problem
 Package:            DOM XML related
 Operating System:   Linux
 PHP Version:        5.6.3
 Block user comment: N
 Private report:     N

 New Comment:

> When extending DOMDocument, it's class properties cannot be
> overwritten/changed. DOMDocument's initial value are kept.

The point is that the properties of DOMDocument are implemented
via the internal counterpart of __get().  If a class extends such
objects, the internal handlers of the parent are attached to the
subclass, and these are prioritized over potentially existing
properties.  I don't think this can be changed, and I'm afraid it
is not even possible to let the compiler trigger a warning or
error if one attempts to override such properties.

It seems to me that such classes should be final, but anyway, we
should document this.

> I believe DOMDocument's properties are read-only by design and
> should remain that way.

DOMDocument::$formatOutput is writable[1], and is supposed to be.
The manual is correct in this regard[2].

[1] <https://3v4l.org/9nTDP>
[2] <https://www.php.net/domdocument>


Previous Comments:
------------------------------------------------------------------------
[2014-12-28 19:11:14] levim@php.net

Further examination of the manual shows that some of DomDocument's properties are explicitly
read-only while others are not. I am not sure what the exact reason for this is. Assuming that none
of the properties are actually writable, I propose changing the docs to list that they are all
read-only properties.

------------------------------------------------------------------------
[2014-12-28 19:08:14] levim@php.net

I'm inclined to say the var_dump output is what is incorrect. I believe DOMDocument's
properties are read-only by design and should remain that way.

------------------------------------------------------------------------
[2014-11-27 08:20:52] arjen at react dot com

Description:
------------
When extending DOMDocument, it's class properties cannot be overwritten/changed.
DOMDocument's initial value are kept.

var_dump() however contains the actual new value, so behaviour is buggy at least.

See http://3v4l.org/6H88X

Test script:
---------------
<?php

class A extends DOMDocument 
{
    public $formatOutput = true;
}
$a = new A;

var_dump($a->formatOutput); // false
var_dump($a); // Has formatOutput => true

Expected result:
----------------
bool(true)
object(A)#1 (34) {
  ["formatOutput"]=>
  bool(true)
  <<cut>>
}

Actual result:
--------------
bool(false)
object(A)#1 (34) {
  ["formatOutput"]=>
  bool(true)
  <<cut>>
}


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=68512&edit=1


Thread (1 message)

  • cmb@php.net
  • Unknown Message
    • cmb@php.net
« previous php.doc.bugs (#18630) next »