| @@ 335-354 (lines=20) @@ | ||
| 332 | ||
| 333 | $finalPart = array_pop($parts); |
|
| 334 | $parent = $this->findContext($parts); |
|
| 335 | while ($parts) { |
|
| 336 | $part = array_shift($parts); |
|
| 337 | if ($this->arrayKeyExists($parent, $part)) { |
|
| 338 | $parent = &$parent[$part]; |
|
| 339 | } elseif ($this->propertyExists($parent, $part)) { |
|
| 340 | $parent = &$parent->$part; |
|
| 341 | } else { |
|
| 342 | $parent = $this->expand($parent); |
|
| 343 | if (is_object($parent) || is_array($parent)) { |
|
| 344 | array_unshift($parts, $part); |
|
| 345 | continue; |
|
| 346 | } else { |
|
| 347 | throw new Exception('Can not set values on primitives or null'); |
|
| 348 | } |
|
| 349 | } |
|
| 350 | if ($parts && $parent instanceof self && $parent !== $this) { |
|
| 351 | $parent->set(implode('.', $parts), $value); |
|
| 352 | return $this; |
|
| 353 | } |
|
| 354 | } |
|
| 355 | $this->filterSpecialNames($finalPart, $value); |
|
| 356 | if (is_array($parent) || $parent instanceof \ArrayAccess) { |
|
| 357 | $parent[$finalPart] = $value; |
|
| @@ 378-397 (lines=20) @@ | ||
| 375 | $parts = explode('.', $name); |
|
| 376 | $finalPart = array_pop($parts); |
|
| 377 | $parent = $this->findContext($parts); |
|
| 378 | while ($parts) { |
|
| 379 | $part = array_shift($parts); |
|
| 380 | if ($this->arrayKeyExists($parent, $part)) { |
|
| 381 | $parent = &$parent[$part]; |
|
| 382 | } elseif ($this->propertyExists($parent, $part)) { |
|
| 383 | $parent = &$parent->$part; |
|
| 384 | } else { |
|
| 385 | $parent = $this->expand($parent); |
|
| 386 | if (is_object($parent) || is_array($parent)) { |
|
| 387 | array_unshift($parts, $part); |
|
| 388 | continue; |
|
| 389 | } else { |
|
| 390 | return $this; |
|
| 391 | } |
|
| 392 | } |
|
| 393 | if ($parts && $parent instanceof self && $parent !== $this) { |
|
| 394 | $parent->remove(implode('.', $parts)); |
|
| 395 | return $this; |
|
| 396 | } |
|
| 397 | } |
|
| 398 | ||
| 399 | if ($this->arrayKeyExists($parent, $finalPart)) { |
|
| 400 | unset($parent[$finalPart]); |
|