Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
rfc:readline_interactive_shell_result_function [2021/01/16 21:04] – tandre | rfc:readline_interactive_shell_result_function [2021/01/20 00:52] – link to RFC announcement tandre |
---|
* Date: 2020-12-19 | * Date: 2020-12-19 |
* Author: Tyson Andre, tandre@php.net | * Author: Tyson Andre, tandre@php.net |
* Status: Under Discussion | * Status: Voting |
* Implementation: https://github.com/php/php-src/pull/5962/files | * Implementation: https://github.com/php/php-src/pull/5962/files |
* First Published at: https://wiki.php.net/rfc/readline_interactive_shell_result_function | * First Published at: https://wiki.php.net/rfc/readline_interactive_shell_result_function |
*/ | */ |
function readline_interactive_shell_result_function(?callable $callback): bool; | function readline_interactive_shell_result_function(?callable $callback): bool; |
| </code> |
| |
| The default implementation added as part of this RFC is effectively identical to the below implementation, but written in C. It can be replaced with a userland implementation or disabled at any time, even in [[https://www.php.net/manual/en/ini.core.php#ini.auto-prepend-file|auto_prepend_file]]. (Because the default implementation is written in C, it will work even if the ini setting ''disable_functions'' includes var_dump and var_export.) |
| |
| <code php> |
| readline_interactive_shell_result_function( |
| function(string $code, $result) { |
| if (!isset($result)) { |
| return; |
| } |
| if (is_scalar($result)) { |
| echo "=> " . var_export($result, true) . "\n"; |
| } else { |
| echo "=> "; var_dump($result); |
| }}); |
</code> | </code> |
| |
Only interactive sessions (''php -a'') are affected, by a difference in the output sent to stdout. The dumping of expression results can be disabled entirely with the ini setting ''cli.enable_interactive_shell_result_function = Off'', or temporarily by calling ''readline_interactive_shell_result_function(null)'' | Only interactive sessions (''php -a'') are affected, by a difference in the output sent to stdout. The dumping of expression results can be disabled entirely with the ini setting ''cli.enable_interactive_shell_result_function = Off'', or temporarily by calling ''readline_interactive_shell_result_function(null)'' |
| |
In interactive sessions, this will start calling [''__debugInfo()''|https://www.php.net/manual/en/language.oop5.magic.php#object.debuginfo] when calling ''var_dump()'' on objects, which may throw or have other side effects after the expression is evaluated. | In interactive sessions, this will start calling [[https://www.php.net/manual/en/language.oop5.magic.php#object.debuginfo|__debugInfo()]] if it exists due to calling ''var_dump()'' on objects. Implementations of ''__debugInfo()'' may throw or have other side effects after the expression is evaluated. |
| |
| |
* i.e. change ''foo(); bar();'' to ''foo(); return (bar());'' | * i.e. change ''foo(); bar();'' to ''foo(); return (bar());'' |
| |
===== Proposed Voting Choices ===== | ===== Vote ===== |
| |
| Voting starts on 2021-01-19 and ends 2021-02-02 |
| |
Yes/No, requiring 2/3 majority | Yes/No, requiring 2/3 majority |
| |
| <doodle title="Dump results of expressions in `php -a` as described in this RFC" auth="tandre" voteType="single" closed="false"> |
| * Yes |
| * No |
| </doodle> |
| |
===== References ===== | ===== References ===== |
| |
| * https://externals.io/message/112568 "[RFC] Configurable callback to dump results of expressions in `php -a`" |
* https://externals.io/message/111073 "Improving the usability of PHP's interactive shell? (completions, displaying expression results, custom syntax)" | * https://externals.io/message/111073 "Improving the usability of PHP's interactive shell? (completions, displaying expression results, custom syntax)" |
* https://wiki.php.net/rfc/readline_interactive_shell_result_function_straw_poll "Straw poll: Interest in configurable callback to dump results of expressions in ''php -a''" | * https://wiki.php.net/rfc/readline_interactive_shell_result_function_straw_poll "Straw poll: Interest in configurable callback to dump results of expressions in ''php -a''" |
| |
0.2: Dump non-null expression results by default with var_dump()/var_export() | 0.2: Dump non-null expression results by default with var_dump()/var_export() |
| 0.3: Document the default implementation used in the implementation |