locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
43 lines (42 loc) • 1.78 kB
JavaScript
import { ensurePhpRuntimeState, getPhpGlobalScope } from "../_helpers/_phpRuntimeState.js";
import { toPhpArrayObject } from "../_helpers/_phpTypes.js";
export function get_defined_functions() {
// discuss at: https://locutus.io/php/get_defined_functions/
// parity verified: PHP 8.3
// original by: Brett Zamir (https://brett-zamir.me)
// improved by: Brett Zamir (https://brett-zamir.me)
// note 1: Returns an array of global function names. Unlike PHP,
// note 1: JavaScript doesn't distinguish between user and internal functions.
// example 1: var $funcs = get_defined_functions()
// example 1: var $result = Array.isArray($funcs) && $funcs.length > 0
// returns 1: true
ensurePhpRuntimeState();
const arr = [];
const already = {};
const globalScope = getPhpGlobalScope();
for (const i in globalScope) {
try {
const topLevelValue = globalScope[i];
if (typeof topLevelValue === 'function') {
if (!already[i]) {
already[i] = 1;
arr.push(i);
}
}
else if (typeof topLevelValue === 'object' && topLevelValue !== null) {
const nestedObject = toPhpArrayObject(topLevelValue);
for (const j in nestedObject) {
if (typeof nestedObject[j] === 'function' && !already[j]) {
already[j] = 1;
arr.push(j);
}
}
}
}
catch (_e) {
// Some objects in Firefox throw exceptions when their
// properties are accessed (e.g., sessionStorage)
}
}
return arr;
}