Для получения массива всех функций которые доступны для использования в PHP(с учётом подключённых модулей, а не в целом список всех возможных функций) можно воспользоваться функцией get_defined_functions(); она вернёт 2 массива, а именно с ключами internal и user, первый из которых будет содержать имена стандартных функций PHP, второй имена функций объявленных пользователями.
Для того чтобы получить список классов которые доступны в PHP(аналогично как и в случаи для функций будет возвращён массив содержащий имена классов, которые доступны в той версии PHP из которой производится вызов, с учётом подключённых расширений PHP) можно воспользоваться функций get_declared_classes(); В результате будет возвращён массив содержащий имена классов, то-есть в отличии от рассмотренной выше функции для получения имён функций массив с классами не будет содержать отдельного подмассива с именами классов указанных пользователем, то-есть будет возвращён именно единый массив в классами. Если класс объявлен для какого либо пространства имён, то в значении элемента указанного массива будет содержаться имя класса с указанием перед ним пространства имён, например "FTP\Connection".
Так же размещу по крайней мере пока информацию про функции token_get_all() и token_name() здесь
В процессе изучения вопроса получения списка функций и классов в PHP нашёл код, в котором в частности использовалось 2 функции, а именно token_get_all и token_name которые предположительно могут быть использованы при парсинге кода на языке PHP. В листинге ниже приведён пример кода, в котором функции token_get_all передаётся переменная содержащая код на языке PHP(переменной можно было так же присвоить код какого либо PHP-файла используя для этого функцию file_get_contents).
В приведённом выше листинге вызов var_dump($tokens); возвращает результат приведённый ниже.
Так же в приведённом выше листинге с PHP-кодом выполнение цикла foreach следующего за вызовом var_dump($tokens); возвращает результат приведённый ниже. В этом результате в 3-ей строке видно, что перенос строки который следует вместе с пробелом который следует перед ним(переносом строки) и после его(переноса строки) считается как единый пробел. Так же в 6-ой строке видно что для функции fopen вызов функции token_name возвращает значение T_STRING, для echo вызов token_name возвращает значение T_ECHO, что видно в второй строке приведённого результата возвращённого циклом foreach, таким образом для того чтобы в частности понять могут ли функции token_get_all и token_name быть полезны для парсинга PHP кода, возможно имеет смысл детальнее изучить работу указанных функций.
Выше было продемонстрировано, что элементами массива возвращаемого функцией token_get_all могут быть строки(например которая содержит значение точки с запятой, так же пока что не выяснено, может ли быть какое то ещё строковое значение или точка с запятой это единственное) или массив, который содержит в себе 3 элемента, первый из которых(с индексом 0) видимо идентификатор который может быть передан функции token_name, второе значение содержит строку рассматриваемой конструкции в строке, и третье значение(с индексом 2) - номер строки в которой находится рассматриваемая конструкция в переданной функции token_get_all строковой переменной. Касаемо идентификаторов передаваемых функции token_name было решено выяснить какими они могут быть и какое значение для них возвращает функция token_name, для этого был написан PHP-скрипт примерно такой же как в листинге ниже(от исходного он отличается диапазоном цикла).
В результате передачи различных параметров функции token_name с использованием скрипта описанного выше, выяснилось что если передавать функции значения параметров от 0 до 259(включительно) и предположительно значений больших или равных 406, то функция token_name возвращает строку "UNKNOWN"(без кавычек), в остальных случаях функция tokn_name возвращает значения приведённые в таблице ниже(эта таблица получена в результате выполнения скрипта приведённого в листинге выше).
Значение передаваемого параметра | Результат возвращённый функцией token_name() |
240 | UNKNOWN |
241 | UNKNOWN |
242 | UNKNOWN |
243 | UNKNOWN |
244 | UNKNOWN |
245 | UNKNOWN |
246 | UNKNOWN |
247 | UNKNOWN |
248 | UNKNOWN |
249 | UNKNOWN |
250 | UNKNOWN |
251 | UNKNOWN |
252 | UNKNOWN |
253 | UNKNOWN |
254 | UNKNOWN |
255 | UNKNOWN |
256 | UNKNOWN |
257 | UNKNOWN |
258 | UNKNOWN |
259 | UNKNOWN |
260 | T_LNUMBER |
261 | T_DNUMBER |
262 | T_STRING |
263 | T_NAME_FULLY_QUALIFIED |
264 | T_NAME_RELATIVE |
265 | T_NAME_QUALIFIED |
266 | T_VARIABLE |
267 | T_INLINE_HTML |
268 | T_ENCAPSED_AND_WHITESPACE |
269 | T_CONSTANT_ENCAPSED_STRING |
270 | T_STRING_VARNAME |
271 | T_NUM_STRING |
272 | T_INCLUDE |
273 | T_INCLUDE_ONCE |
274 | T_EVAL |
275 | T_REQUIRE |
276 | T_REQUIRE_ONCE |
277 | T_LOGICAL_OR |
278 | T_LOGICAL_XOR |
279 | T_LOGICAL_AND |
280 | T_PRINT |
281 | T_YIELD |
282 | T_YIELD_FROM |
283 | T_INSTANCEOF |
284 | T_NEW |
285 | T_CLONE |
286 | T_EXIT |
287 | T_IF |
288 | T_ELSEIF |
289 | T_ELSE |
290 | T_ENDIF |
291 | T_ECHO |
292 | T_DO |
293 | T_WHILE |
294 | T_ENDWHILE |
295 | T_FOR |
296 | T_ENDFOR |
297 | T_FOREACH |
298 | T_ENDFOREACH |
299 | T_DECLARE |
300 | T_ENDDECLARE |
301 | T_AS |
302 | T_SWITCH |
303 | T_ENDSWITCH |
304 | T_CASE |
305 | T_DEFAULT |
306 | T_MATCH |
307 | T_BREAK |
308 | T_CONTINUE |
309 | T_GOTO |
310 | T_FUNCTION |
311 | T_FN |
312 | T_CONST |
313 | T_RETURN |
314 | T_TRY |
315 | T_CATCH |
316 | T_FINALLY |
317 | T_THROW |
318 | T_USE |
319 | T_INSTEADOF |
320 | T_GLOBAL |
321 | T_STATIC |
322 | T_ABSTRACT |
323 | T_FINAL |
324 | T_PRIVATE |
325 | T_PROTECTED |
326 | T_PUBLIC |
327 | T_READONLY |
328 | T_VAR |
329 | T_UNSET |
330 | T_ISSET |
331 | T_EMPTY |
332 | T_HALT_COMPILER |
333 | T_CLASS |
334 | T_TRAIT |
335 | T_INTERFACE |
336 | T_ENUM |
337 | T_EXTENDS |
338 | T_IMPLEMENTS |
339 | T_NAMESPACE |
340 | T_LIST |
341 | T_ARRAY |
342 | T_CALLABLE |
343 | T_LINE |
344 | T_FILE |
345 | T_DIR |
346 | T_CLASS_C |
347 | T_TRAIT_C |
348 | T_METHOD_C |
349 | T_FUNC_C |
350 | T_NS_C |
351 | T_ATTRIBUTE |
352 | T_PLUS_EQUAL |
353 | T_MINUS_EQUAL |
354 | T_MUL_EQUAL |
355 | T_DIV_EQUAL |
356 | T_CONCAT_EQUAL |
357 | T_MOD_EQUAL |
358 | T_AND_EQUAL |
359 | T_OR_EQUAL |
360 | T_XOR_EQUAL |
361 | T_SL_EQUAL |
362 | T_SR_EQUAL |
363 | T_COALESCE_EQUAL |
364 | T_BOOLEAN_OR |
365 | T_BOOLEAN_AND |
366 | T_IS_EQUAL |
367 | T_IS_NOT_EQUAL |
368 | T_IS_IDENTICAL |
369 | T_IS_NOT_IDENTICAL |
370 | T_IS_SMALLER_OR_EQUAL |
371 | T_IS_GREATER_OR_EQUAL |
372 | T_SPACESHIP |
373 | T_SL |
374 | T_SR |
375 | T_INC |
376 | T_DEC |
377 | T_INT_CAST |
378 | T_DOUBLE_CAST |
379 | T_STRING_CAST |
380 | T_ARRAY_CAST |
381 | T_OBJECT_CAST |
382 | T_BOOL_CAST |
383 | T_UNSET_CAST |
384 | T_OBJECT_OPERATOR |
385 | T_NULLSAFE_OBJECT_OPERATOR |
386 | T_DOUBLE_ARROW |
387 | T_COMMENT |
388 | T_DOC_COMMENT |
389 | T_OPEN_TAG |
390 | T_OPEN_TAG_WITH_ECHO |
391 | T_CLOSE_TAG |
392 | T_WHITESPACE |
393 | T_START_HEREDOC |
394 | T_END_HEREDOC |
395 | T_DOLLAR_OPEN_CURLY_BRACES |
396 | T_CURLY_OPEN |
397 | T_DOUBLE_COLON |
398 | T_NS_SEPARATOR |
399 | T_ELLIPSIS |
400 | T_COALESCE |
401 | T_POW |
402 | T_POW_EQUAL |
403 | T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG |
404 | T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG |
405 | T_BAD_CHARACTER |
406 | UNKNOWN |
407 | UNKNOWN |
408 | UNKNOWN |
409 | UNKNOWN |
410 | UNKNOWN |