Отвечу максимально полно
Чтобы скрипт php что то 'получил', он должен быть как минимум запущен, подавляющее большинство стратегий создания приложений на php это когда клиент (браузер) либо чистый html либо javascript делает запрос на сервер, а сервер запускает на короткое время php скрипт чтобы тот вернул ответ (готовый html или данные в каком то виде, например json чтобы javascript обработал)
Общение между браузером и сервером происходит по http короткими запросами вопрос-ответ, поэтому фраза 'установить переменную' немного некорректна в этом случае, ведь установив переменную в результате запроса, таковой она будет только тот короткий момент, пока этот запрос обрабатывается (например все что идет в http запросе как GET или POST параметры, веб сервер автоматически прописывает в глобальные переменные $_GET и $_POST соответственно,
бери и читай). Для отправки запросов из браузера на сервер есть готовые библиотеки, гуглить ajax (на чистом javascript без библиотек для этого можно использовать
XMLHttpRequest)
Поэтому есть способ передачи данных через заголовки запроса, с помощью
cookies, браузер устанавливает куки, которые автоматически в дальнейшем добавляются к любому запросу с данного домена на сервер. На сервере в php доступ к ним можно получить из переменной
$_COOKIE. Так же есть способ
установить куки со стороны сервера. С точки зрения эффективности это не самый лучший способ, так как данные получаются не сохраняются где то на сервере, а транслируются повторно с каждым запросом, поэтому большие объемы хранить там не рекомендуется.
Существует подход, когда php приложение не короткоживущий скрипт а сам веб сервер, обработка запросов, чтение get/post параметров, куки и прочее, в этом случае обрабатывает это приложение (есть библиотеки, например асинхронный php react), но зато, так как приложение не завершает свою работу после запроса, прочитав переменную из запроса ее можно сохранить в памяти приложения. Этот подход на порядок ускоряет работу приложений по сравнению с классическим http-rest подходом (ведь скриптам не нужно на каждый запрос восстанавливать состояние серверного приложения, загружая нужные данные откуда-то, например из базы данных) т.е. из коробки более быстрый но сложнее к масштабированию.
В качестве бонуса у этого подхода появляется удобная возможность использовать
websocket, когда запросы отправляются не в виде отдельных а как пакет данных внутри уже открытого соединения (если что веб серверы и браузеры поддерживают и для типичного http rest незакрываемые соединения, но они заголовки так или иначе передаются, занимая время и ресурсы), и не только клиентское приложение сможет отправлять запросы от браузера на сервер но и сервер сможет слать сообщения клиенту