IDE могут посмотреть исходный код и посмотреть, какой синтаксис вы используете. Они используют это для предоставления подсказок, перекрестных ссылок и всего прочего, что они делают во время редактирования.
Но как только код скомпилирован и запущен, большая часть этой информации отбрасывается. Значения не имеют никакой информации о том, как они были рассчитаны - строка - это просто набор символов. Существуют функции отражения, которые позволяют получить доступ к стеку вызовов, чтобы увидеть, какие функции были вызваны, поскольку это необходимо в памяти для реализации возврата, но данные не отслеживают, откуда пришли значения.
Таким образом, нет встроенного способа получить информацию, которую вы ищете. Если вам нужно следить за этим, вам придется реализовать его в самом коде приложения.
getClassName(): array
{
return ['source' => '::class', 'value' => MyClassName::class];
return ['source' => 'string', 'value' => 'MyClassName'];
}