readline_callback_handler_install

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

readline_callback_handler_installInicializa la interfaz y el terminal de devolución de llamada de readline, muestra el prompt y retorna inmediatamente

Descripción

function readline_callback_handler_install(string $prompt, callable $callback): true

Define una interfaz de devolución de llamada para readline, muestra el prompt y retorna inmediatamente. Llamar a esta función dos veces sin borrar previamente la interfaz de devolución de llamada anterior borrará automáticamente y correctamente la interfaz antigua.

La funcionalidad de devolución de llamada es muy útil cuando se combina con la función stream_select() que permite la interconexión IO / entrada de usuario, a diferencia de readline().

Esta función solo está disponible si la biblioteca readline con la que se compiló PHP la admite. No está disponible en Windows.

Parámetros

prompt

El mensaje de prompt.

callback

La función callback toma un argumento: la entrada de usuario retornada.

Valores devueltos

Retorna siempre true.

Historial de cambios

Versión Descripción
8.5.0 El tipo de retorno es ahora true, anteriormente era bool.

Ejemplos

Ejemplo #1 Ejemplo de interfaz de devolución de llamada de Readline

<?php
function rl_callback($ret)
{
    global $c, $prompting;

    echo "You entered: $ret\n";
    $c++;

    if ($c > 10) {
        $prompting = false;
        readline_callback_handler_remove();
    } else {
        readline_callback_handler_install("[$c] Entrar algo: ", 'rl_callback');
    }
}

$c = 1;
$prompting = true;

readline_callback_handler_install("[$c] Entrar algo: ", 'rl_callback');

while ($prompting) {
    $w = NULL;
    $e = NULL;
    $n = stream_select($r = array(STDIN), $w, $e, null);
    if ($n && in_array(STDIN, $r)) {
        // lee un carácter, llamará a la función de devolución de llamada cuando se ingrese una nueva línea
        readline_callback_read_char();
    }
}

echo "El prompt está desactivado. Todo ha sido realizado.\n";
?>

Véase también

add a note

User Contributed Notes 1 note

up
1
thflori
8 years ago
To read byte wise and multi line you can check the line_buffer from readline_info:

<?php

function read(int $count, string $prompt = null): string
{
    $previous = '';
    readline_callback_handler_install($prompt ?? " \e[D", function ($str) use (&$previous) {
        $previous .= $str . PHP_EOL;
    });
    do {
        $r = array(STDIN);
        $n = stream_select($r, $w, $e, null);
        if ($n && in_array(STDIN, $r)) {
            readline_callback_read_char();
            $str = $previous . readline_info('line_buffer');
        }
    } while (mb_strlen($str) < $count); // use strlen if you need the exact byte count
    readline_callback_handler_remove();

    return $str;
}