Files
Chamilo/vendor/zendframework/zend-server/src/Reflection/ReflectionParameter.php
2025-04-10 12:24:57 +02:00

176 lines
3.8 KiB
PHP

<?php
/**
* @see https://github.com/zendframework/zend-server for the canonical source repository
* @copyright Copyright (c) 2005-2018 Zend Technologies USA Inc. (https://www.zend.com)
* @license https://github.com/zendframework/zend-server/blob/master/LICENSE.md New BSD License
*/
namespace Zend\Server\Reflection;
/**
* Parameter Reflection
*
* Decorates a ReflectionParameter to allow setting the parameter type
*/
class ReflectionParameter
{
/**
* @var \ReflectionParameter
*/
protected $reflection;
/**
* Parameter position
* @var int
*/
protected $position;
/**
* Parameter type
* @var string
*/
protected $type;
/**
* Parameter description
* @var string
*/
protected $description;
/**
* Parameter name (needed for serialization)
* @var string
*/
protected $name;
/**
* Declaring function name (needed for serialization)
* @var string
*/
protected $functionName;
/**
* Constructor
*
* @param \ReflectionParameter $r
* @param string $type Parameter type
* @param string $description Parameter description
*/
public function __construct(\ReflectionParameter $r, $type = 'mixed', $description = '')
{
$this->reflection = $r;
// Store parameters needed for (un)serialization
$this->name = $r->getName();
$this->functionName = $r->getDeclaringClass()
? [$r->getDeclaringClass()->getName(), $r->getDeclaringFunction()->getName()]
: $r->getDeclaringFunction()->getName();
$this->setType($type);
$this->setDescription($description);
}
/**
* Proxy reflection calls
*
* @param string $method
* @param array $args
* @throws Exception\BadMethodCallException
* @return mixed
*/
public function __call($method, $args)
{
if (method_exists($this->reflection, $method)) {
return call_user_func_array([$this->reflection, $method], $args);
}
throw new Exception\BadMethodCallException('Invalid reflection method');
}
/**
* Retrieve parameter type
*
* @return string
*/
public function getType()
{
return $this->type;
}
/**
* Set parameter type
*
* @param string|null $type
* @throws Exception\InvalidArgumentException
* @return void
*/
public function setType($type)
{
if (! is_string($type) && (null !== $type)) {
throw new Exception\InvalidArgumentException('Invalid parameter type');
}
$this->type = $type;
}
/**
* Retrieve parameter description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
/**
* Set parameter description
*
* @param string|null $description
* @throws Exception\InvalidArgumentException
* @return void
*/
public function setDescription($description)
{
if (! is_string($description) && (null !== $description)) {
throw new Exception\InvalidArgumentException('Invalid parameter description');
}
$this->description = $description;
}
/**
* Set parameter position
*
* @param int $index
* @return void
*/
public function setPosition($index)
{
$this->position = (int) $index;
}
/**
* Return parameter position
*
* @return int
*/
public function getPosition()
{
return $this->position;
}
/**
* @return string[]
*/
public function __sleep()
{
return ['position', 'type', 'description', 'name', 'functionName'];
}
public function __wakeup()
{
$this->reflection = new \ReflectionParameter($this->functionName, $this->name);
}
}