Issues (21)

src/SerializableElementTrait.php (1 issue)

Labels
Severity
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SimpleSAML\XML;
6
7
use DOMElement;
8
use SimpleSAML\XML\DOMDocumentFactory;
9
10
use function array_pop;
11
use function get_object_vars;
12
13
/**
14
 * Trait grouping common functionality for elements implementing the SerializableElement element.
15
 *
16
 * @package simplesamlphp/xml-common
17
 */
18
trait SerializableElementTrait
19
{
20
    /**
21
     * Whether to format the string output of this element or not.
22
     *
23
     * Defaults to true. Override to disable output formatting.
24
     *
25
     * @var bool
26
     */
27
    protected bool $formatOutput = true;
28
29
30
    /**
31
     * Output the class as an XML-formatted string
32
     *
33
     * @return string
34
     */
35
    public function __toString(): string
36
    {
37
        $xml = $this->toXML();
38
39
        $xmlString = $xml->ownerDocument->saveXML();
0 ignored issues
show
The method saveXML() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

39
        /** @scrutinizer ignore-call */ 
40
        $xmlString = $xml->ownerDocument->saveXML();

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
40
41
        $doc = DOMDocumentFactory::fromString($xmlString);
42
        $doc->formatOutput = $this->formatOutput;
43
44
        return $doc->saveXML($doc->firstChild);
45
    }
46
47
48
    /**
49
     * Serialize this XML chunk.
50
     *
51
     * This method will be invoked by any calls to serialize().
52
     *
53
     * @return array{0: string} The serialized representation of this XML object.
54
     */
55
    public function __serialize(): array
56
    {
57
        $xml = $this->toXML();
58
        return [$xml->ownerDocument->saveXML($xml)];
59
    }
60
61
62
    /**
63
     * Unserialize an XML object and load it..
64
     *
65
     * This method will be invoked by any calls to unserialize(), allowing us to restore any data that might not
66
     * be serializable in its original form (e.g.: DOM objects).
67
     *
68
     * @param array{0: string} $serialized The XML object that we want to restore.
69
     */
70
    public function __unserialize(array $serialized): void
71
    {
72
        $xml = static::fromXML(
73
            DOMDocumentFactory::fromString(array_pop($serialized))->documentElement,
74
        );
75
76
        $vars = get_object_vars($xml);
77
        foreach ($vars as $k => $v) {
78
            $this->$k = $v;
79
        }
80
    }
81
82
83
    /**
84
     * Create XML from this class
85
     *
86
     * @param \DOMElement|null $parent
87
     * @return \DOMElement
88
     */
89
    abstract public function toXML(?DOMElement $parent = null): DOMElement;
90
}
91