1 | <?php |
||
40 | class ClassMetadata extends ClassMetadataInfo |
||
41 | { |
||
42 | /** |
||
43 | * The ReflectionProperty instances of the mapped class. |
||
44 | * |
||
45 | * @var \ReflectionProperty[] |
||
46 | */ |
||
47 | public $reflFields = array(); |
||
48 | |||
49 | /** |
||
50 | * @var \Doctrine\Instantiator\InstantiatorInterface|null |
||
51 | */ |
||
52 | private $instantiator; |
||
53 | |||
54 | /** |
||
55 | * Initializes a new ClassMetadata instance that will hold the object-document mapping |
||
56 | * metadata of the class with the given name. |
||
57 | * |
||
58 | * @param string $documentName The name of the document class the new instance is used for. |
||
59 | */ |
||
60 | 945 | public function __construct($documentName) |
|
68 | |||
69 | /** |
||
70 | * Map a field. |
||
71 | * |
||
72 | * @param array $mapping The mapping information. |
||
73 | * @return void |
||
74 | */ |
||
75 | 935 | public function mapField(array $mapping) |
|
83 | |||
84 | /** |
||
85 | * Determines which fields get serialized. |
||
86 | * |
||
87 | * It is only serialized what is necessary for best unserialization performance. |
||
88 | * That means any metadata properties that are not set or empty or simply have |
||
89 | * their default value are NOT serialized. |
||
90 | * |
||
91 | * Parts that are also NOT serialized because they can not be properly unserialized: |
||
92 | * - reflClass (ReflectionClass) |
||
93 | * - reflFields (ReflectionProperty array) |
||
94 | * |
||
95 | * @return array The names of all the fields that should be serialized. |
||
96 | */ |
||
97 | 6 | public function __sleep() |
|
98 | { |
||
99 | // This metadata is always serialized/cached. |
||
100 | $serialized = array( |
||
101 | 6 | 'fieldMappings', |
|
102 | 'associationMappings', |
||
103 | 'identifier', |
||
104 | 'name', |
||
105 | 'namespace', // TODO: REMOVE |
||
106 | 'db', |
||
107 | 'collection', |
||
108 | 'writeConcern', |
||
109 | 'rootDocumentName', |
||
110 | 'generatorType', |
||
111 | 'generatorOptions', |
||
112 | 'idGenerator', |
||
113 | 'indexes', |
||
114 | 'shardKey', |
||
115 | ); |
||
116 | |||
117 | // The rest of the metadata is only serialized if necessary. |
||
118 | 6 | if ($this->changeTrackingPolicy != self::CHANGETRACKING_DEFERRED_IMPLICIT) { |
|
119 | $serialized[] = 'changeTrackingPolicy'; |
||
120 | } |
||
121 | |||
122 | 6 | if ($this->customRepositoryClassName) { |
|
123 | 1 | $serialized[] = 'customRepositoryClassName'; |
|
124 | } |
||
125 | |||
126 | 6 | if ($this->inheritanceType != self::INHERITANCE_TYPE_NONE || $this->discriminatorField !== null) { |
|
127 | 4 | $serialized[] = 'inheritanceType'; |
|
128 | 4 | $serialized[] = 'discriminatorField'; |
|
129 | 4 | $serialized[] = 'discriminatorValue'; |
|
130 | 4 | $serialized[] = 'discriminatorMap'; |
|
131 | 4 | $serialized[] = 'defaultDiscriminatorValue'; |
|
132 | 4 | $serialized[] = 'parentClasses'; |
|
133 | 4 | $serialized[] = 'subClasses'; |
|
134 | } |
||
135 | |||
136 | 6 | if ($this->isMappedSuperclass) { |
|
137 | 1 | $serialized[] = 'isMappedSuperclass'; |
|
138 | } |
||
139 | |||
140 | 6 | if ($this->isEmbeddedDocument) { |
|
141 | 1 | $serialized[] = 'isEmbeddedDocument'; |
|
142 | } |
||
143 | |||
144 | 6 | if ($this->isQueryResultDocument) { |
|
145 | $serialized[] = 'isQueryResultDocument'; |
||
146 | } |
||
147 | |||
148 | 6 | if ($this->isVersioned) { |
|
149 | $serialized[] = 'isVersioned'; |
||
150 | $serialized[] = 'versionField'; |
||
151 | } |
||
152 | |||
153 | 6 | if ($this->lifecycleCallbacks) { |
|
|
|||
154 | $serialized[] = 'lifecycleCallbacks'; |
||
155 | } |
||
156 | |||
157 | 6 | if ($this->file) { |
|
158 | 1 | $serialized[] = 'file'; |
|
159 | } |
||
160 | |||
161 | 6 | if ($this->slaveOkay) { |
|
162 | 1 | $serialized[] = 'slaveOkay'; |
|
163 | } |
||
164 | |||
165 | 6 | if ($this->distance) { |
|
166 | 1 | $serialized[] = 'distance'; |
|
167 | } |
||
168 | |||
169 | 6 | if ($this->collectionCapped) { |
|
170 | 1 | $serialized[] = 'collectionCapped'; |
|
171 | 1 | $serialized[] = 'collectionSize'; |
|
172 | 1 | $serialized[] = 'collectionMax'; |
|
173 | } |
||
174 | |||
175 | 6 | return $serialized; |
|
176 | } |
||
177 | |||
178 | /** |
||
179 | * Restores some state that can not be serialized/unserialized. |
||
180 | * |
||
181 | * @return void |
||
182 | */ |
||
183 | 6 | public function __wakeup() |
|
199 | |||
200 | /** |
||
201 | * Creates a new instance of the mapped class, without invoking the constructor. |
||
202 | * |
||
203 | * @return object |
||
204 | */ |
||
205 | 396 | public function newInstance() |
|
209 | } |
||
210 |
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)
or! empty(...)
instead.