UNPKG

phpjs

Version:

php.js offers community built php functions in javascript

185 lines (166 loc) 5.91 kB
--- layout: page title: "JavaScript var_export function" comments: true sharing: true footer: true alias: - /functions/view/var_export:578 - /functions/view/var_export - /functions/view/578 - /functions/var_export:578 - /functions/578 --- <!-- Generated by Rakefile:build --> A JavaScript equivalent of PHP's var_export {% codeblock var/var_export.js lang:js https://raw.github.com/kvz/phpjs/master/functions/var/var_export.js raw on github %} function var_export (mixed_expression, bool_return) { // From: http://phpjs.org/functions // + original by: Philip Peterson // + improved by: johnrembo // + improved by: Brett Zamir (http://brett-zamir.me) // + input by: Brian Tafoya (http://www.premasolutions.com/) // + bugfixed by: Brett Zamir (http://brett-zamir.me) // + bugfixed by: Brett Zamir (http://brett-zamir.me) // + input by: Hans Henrik (http://hanshenrik.tk/) // - depends on: echo // * example 1: var_export(null); // * returns 1: null // * example 2: var_export({0: 'Kevin', 1: 'van', 2: 'Zonneveld'}, true); // * returns 2: "array (\n 0 => 'Kevin',\n 1 => 'van',\n 2 => 'Zonneveld'\n)" // * example 3: data = 'Kevin'; // * example 3: var_export(data, true); // * returns 3: "'Kevin'" var retstr = '', iret = '', value, cnt = 0, x = [], i = 0, funcParts = [], // We use the last argument (not part of PHP) to pass in // our indentation level idtLevel = arguments[2] || 2, innerIndent = '', outerIndent = '', getFuncName = function (fn) { var name = (/\W*function\s+([\w\$]+)\s*\(/).exec(fn); if (!name) { return '(Anonymous)'; } return name[1]; }, _makeIndent = function (idtLevel) { return (new Array(idtLevel + 1)).join(' '); }, __getType = function (inp) { var i = 0, match, types, cons, type = typeof inp; if (type === 'object' && (inp && inp.constructor) && getFuncName(inp.constructor) === 'PHPJS_Resource') { return 'resource'; } if (type === 'function') { return 'function'; } if (type === 'object' && !inp) { return 'null'; // Should this be just null? } if (type === "object") { if (!inp.constructor) { return 'object'; } cons = inp.constructor.toString(); match = cons.match(/(\w+)\(/); if (match) { cons = match[1].toLowerCase(); } types = ["boolean", "number", "string", "array"]; for (i = 0; i < types.length; i++) { if (cons === types[i]) { type = types[i]; break; } } } return type; }, type = __getType(mixed_expression); if (type === null) { retstr = "NULL"; } else if (type === 'array' || type === 'object') { outerIndent = _makeIndent(idtLevel - 2); innerIndent = _makeIndent(idtLevel); for (i in mixed_expression) { value = this.var_export(mixed_expression[i], 1, idtLevel + 2); value = typeof value === 'string' ? value.replace(/</g, '&lt;'). replace(/>/g, '&gt;') : value; x[cnt++] = innerIndent + i + ' => ' + (__getType(mixed_expression[i]) === 'array' ? '\n' : '') + value; } iret = x.join(',\n'); retstr = outerIndent + "array (\n" + iret + '\n' + outerIndent + ')'; } else if (type === 'function') { funcParts = mixed_expression.toString(). match(/function .*?\((.*?)\) \{([\s\S]*)\}/); // For lambda functions, var_export() outputs such as the following: // '\000lambda_1'. Since it will probably not be a common use to // expect this (unhelpful) form, we'll use another PHP-exportable // construct, create_function() (though dollar signs must be on the // variables in JavaScript); if using instead in JavaScript and you // are using the namespaced version, note that create_function() will // not be available as a global retstr = "create_function ('" + funcParts[1] + "', '" + funcParts[2].replace(new RegExp("'", 'g'), "\\'") + "')"; } else if (type === 'resource') { retstr = 'NULL'; // Resources treated as null for var_export } else { retstr = typeof mixed_expression !== 'string' ? mixed_expression : "'" + mixed_expression.replace(/(["'])/g, "\\$1"). replace(/\0/g, "\\0") + "'"; } if (!bool_return) { this.echo(retstr); return null; } return retstr; } {% endcodeblock %} - [Raw function on GitHub](https://github.com/kvz/phpjs/blob/master/functions/var/var_export.js) Please note that php.js uses JavaScript objects as substitutes for PHP arrays, they are the closest match to this hashtable-like data structure. Please also note that php.js offers community built functions and goes by the [McDonald's Theory](https://medium.com/what-i-learned-building/9216e1c9da7d). We'll put online functions that are far from perfect, in the hopes to spark better contributions. Do you have one? Then please just: - [Edit on GitHub](https://github.com/kvz/phpjs/edit/master/functions/var/var_export.js) ### Example 1 This code {% codeblock lang:js example %} var_export(null); {% endcodeblock %} Should return {% codeblock lang:js returns %} null {% endcodeblock %} ### Example 2 This code {% codeblock lang:js example %} var_export({0: 'Kevin', 1: 'van', 2: 'Zonneveld'}, true); {% endcodeblock %} Should return {% codeblock lang:js returns %} "array (\n 0 => 'Kevin',\n 1 => 'van',\n 2 => 'Zonneveld'\n)" {% endcodeblock %} ### Example 3 This code {% codeblock lang:js example %} data = 'Kevin'; var_export(data, true); {% endcodeblock %} Should return {% codeblock lang:js returns %} "'Kevin'" {% endcodeblock %} ### Other PHP functions in the var extension {% render_partial _includes/custom/var.html %}