82 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
<?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\VarDumper\Caster;
 | 
						|
 | 
						|
use Symfony\Component\VarDumper\Cloner\Stub;
 | 
						|
 | 
						|
/**
 | 
						|
 * @author Jan Schädlich <jan.schaedlich@sensiolabs.de>
 | 
						|
 *
 | 
						|
 * @final since Symfony 4.4
 | 
						|
 */
 | 
						|
class MemcachedCaster
 | 
						|
{
 | 
						|
    private static $optionConstants;
 | 
						|
    private static $defaultOptions;
 | 
						|
 | 
						|
    public static function castMemcached(\Memcached $c, array $a, Stub $stub, $isNested)
 | 
						|
    {
 | 
						|
        $a += [
 | 
						|
            Caster::PREFIX_VIRTUAL.'servers' => $c->getServerList(),
 | 
						|
            Caster::PREFIX_VIRTUAL.'options' => new EnumStub(
 | 
						|
                self::getNonDefaultOptions($c)
 | 
						|
            ),
 | 
						|
        ];
 | 
						|
 | 
						|
        return $a;
 | 
						|
    }
 | 
						|
 | 
						|
    private static function getNonDefaultOptions(\Memcached $c): array
 | 
						|
    {
 | 
						|
        self::$defaultOptions = self::$defaultOptions ?? self::discoverDefaultOptions();
 | 
						|
        self::$optionConstants = self::$optionConstants ?? self::getOptionConstants();
 | 
						|
 | 
						|
        $nonDefaultOptions = [];
 | 
						|
        foreach (self::$optionConstants as $constantKey => $value) {
 | 
						|
            if (self::$defaultOptions[$constantKey] !== $option = $c->getOption($value)) {
 | 
						|
                $nonDefaultOptions[$constantKey] = $option;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return $nonDefaultOptions;
 | 
						|
    }
 | 
						|
 | 
						|
    private static function discoverDefaultOptions(): array
 | 
						|
    {
 | 
						|
        $defaultMemcached = new \Memcached();
 | 
						|
        $defaultMemcached->addServer('127.0.0.1', 11211);
 | 
						|
 | 
						|
        $defaultOptions = [];
 | 
						|
        self::$optionConstants = self::$optionConstants ?? self::getOptionConstants();
 | 
						|
 | 
						|
        foreach (self::$optionConstants as $constantKey => $value) {
 | 
						|
            $defaultOptions[$constantKey] = $defaultMemcached->getOption($value);
 | 
						|
        }
 | 
						|
 | 
						|
        return $defaultOptions;
 | 
						|
    }
 | 
						|
 | 
						|
    private static function getOptionConstants(): array
 | 
						|
    {
 | 
						|
        $reflectedMemcached = new \ReflectionClass(\Memcached::class);
 | 
						|
 | 
						|
        $optionConstants = [];
 | 
						|
        foreach ($reflectedMemcached->getConstants() as $constantKey => $value) {
 | 
						|
            if (str_starts_with($constantKey, 'OPT_')) {
 | 
						|
                $optionConstants[$constantKey] = $value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return $optionConstants;
 | 
						|
    }
 | 
						|
}
 |