82 lines
1.8 KiB
PHP
82 lines
1.8 KiB
PHP
|
<?php
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
/**
|
||
|
* phpDocumentor
|
||
|
*
|
||
|
* For the full copyright and license information, please view the LICENSE
|
||
|
* file that was distributed with this source code.
|
||
|
*
|
||
|
* @copyright 2010-2018 Mike van Riel / Naenius (http://www.naenius.com)
|
||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT
|
||
|
* @link http://phpdoc.org
|
||
|
*/
|
||
|
|
||
|
namespace phpDocumentor\Reflection;
|
||
|
|
||
|
use InvalidArgumentException;
|
||
|
|
||
|
/**
|
||
|
* Value Object for Fqsen.
|
||
|
*
|
||
|
* @link https://github.com/phpDocumentor/fig-standards/blob/master/proposed/phpdoc-meta.md
|
||
|
*/
|
||
|
final class Fqsen
|
||
|
{
|
||
|
/**
|
||
|
* @var string full quallified class name
|
||
|
*/
|
||
|
private $fqsen;
|
||
|
|
||
|
/**
|
||
|
* @var string name of the element without path.
|
||
|
*/
|
||
|
private $name;
|
||
|
|
||
|
/**
|
||
|
* Initializes the object.
|
||
|
*
|
||
|
* @throws InvalidArgumentException when $fqsen is not matching the format.
|
||
|
*/
|
||
|
public function __construct(string $fqsen)
|
||
|
{
|
||
|
$matches = [];
|
||
|
$result = preg_match(
|
||
|
'/^\\\\([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff\\\\]*)?(?:[:]{2}\\$?([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*))?(?:\\(\\))?$/',
|
||
|
$fqsen,
|
||
|
$matches
|
||
|
);
|
||
|
|
||
|
if ($result === 0) {
|
||
|
throw new InvalidArgumentException(
|
||
|
sprintf('"%s" is not a valid Fqsen.', $fqsen)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
$this->fqsen = $fqsen;
|
||
|
|
||
|
if (isset($matches[2])) {
|
||
|
$this->name = $matches[2];
|
||
|
} else {
|
||
|
$matches = explode('\\', $fqsen);
|
||
|
$this->name = trim(end($matches), '()');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* converts this class to string.
|
||
|
*/
|
||
|
public function __toString(): string
|
||
|
{
|
||
|
return $this->fqsen;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the name of the element without path.
|
||
|
*/
|
||
|
public function getName(): string
|
||
|
{
|
||
|
return $this->name;
|
||
|
}
|
||
|
}
|