| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | 
							- <?php
 
- /*
 
-  * This file is part of the Symfony package.
 
-  *
 
-  * (c) Fabien Potencier <fabien@symfony.com>
 
-  *
 
-  * For the full copyright and license information, please view the LICENSE
 
-  * file that was distributed with this source code.
 
-  */
 
- namespace Symfony\Component\VarExporter;
 
- use Symfony\Component\VarExporter\Exception\ExceptionInterface;
 
- use Symfony\Component\VarExporter\Internal\Exporter;
 
- use Symfony\Component\VarExporter\Internal\Hydrator;
 
- use Symfony\Component\VarExporter\Internal\Registry;
 
- use Symfony\Component\VarExporter\Internal\Values;
 
- /**
 
-  * Exports serializable PHP values to PHP code.
 
-  *
 
-  * VarExporter allows serializing PHP data structures to plain PHP code (like var_export())
 
-  * while preserving all the semantics associated with serialize() (unlike var_export()).
 
-  *
 
-  * By leveraging OPcache, the generated PHP code is faster than doing the same with unserialize().
 
-  *
 
-  * @author Nicolas Grekas <p@tchwork.com>
 
-  */
 
- final class VarExporter
 
- {
 
-     /**
 
-      * Exports a serializable PHP value to PHP code.
 
-      *
 
-      * @param mixed $value          The value to export
 
-      * @param bool  &$isStaticValue Set to true after execution if the provided value is static, false otherwise
 
-      *
 
-      * @return string The value exported as PHP code
 
-      *
 
-      * @throws ExceptionInterface When the provided value cannot be serialized
 
-      */
 
-     public static function export($value, bool &$isStaticValue = null): string
 
-     {
 
-         $isStaticValue = true;
 
-         if (!\is_object($value) && !(\is_array($value) && $value) && !$value instanceof \__PHP_Incomplete_Class && !\is_resource($value)) {
 
-             return Exporter::export($value);
 
-         }
 
-         $objectsPool = new \SplObjectStorage();
 
-         $refsPool = [];
 
-         $objectsCount = 0;
 
-         try {
 
-             $value = Exporter::prepare([$value], $objectsPool, $refsPool, $objectsCount, $isStaticValue)[0];
 
-         } finally {
 
-             $references = [];
 
-             foreach ($refsPool as $i => $v) {
 
-                 if ($v[0]->count) {
 
-                     $references[1 + $i] = $v[2];
 
-                 }
 
-                 $v[0] = $v[1];
 
-             }
 
-         }
 
-         if ($isStaticValue) {
 
-             return Exporter::export($value);
 
-         }
 
-         $classes = [];
 
-         $values = [];
 
-         $states = [];
 
-         foreach ($objectsPool as $i => $v) {
 
-             [, $classes[], $values[], $wakeup] = $objectsPool[$v];
 
-             if (0 < $wakeup) {
 
-                 $states[$wakeup] = $i;
 
-             } elseif (0 > $wakeup) {
 
-                 $states[-$wakeup] = [$i, array_pop($values)];
 
-                 $values[] = [];
 
-             }
 
-         }
 
-         ksort($states);
 
-         $wakeups = [null];
 
-         foreach ($states as $k => $v) {
 
-             if (\is_array($v)) {
 
-                 $wakeups[-$v[0]] = $v[1];
 
-             } else {
 
-                 $wakeups[] = $v;
 
-             }
 
-         }
 
-         if (null === $wakeups[0]) {
 
-             unset($wakeups[0]);
 
-         }
 
-         $properties = [];
 
-         foreach ($values as $i => $vars) {
 
-             foreach ($vars as $class => $values) {
 
-                 foreach ($values as $name => $v) {
 
-                     $properties[$class][$name][$i] = $v;
 
-                 }
 
-             }
 
-         }
 
-         if ($classes || $references) {
 
-             $value = new Hydrator(new Registry($classes), $references ? new Values($references) : null, $properties, $value, $wakeups);
 
-         } else {
 
-             $isStaticValue = true;
 
-         }
 
-         return Exporter::export($value);
 
-     }
 
- }
 
 
  |