TigerZF
🌐Español

23.3. Obtención de opciones y argumentos

Después de haber declarado las opciones que el objeto Zend_Console_Getopt debe reconocer, y de suministrar los argumentos desde la línea de comandos o un array, puede consultar el objeto para averiguar qué opciones especificó un usuario en una invocación determinada de su programa desde la línea de comandos. La clase implementa métodos mágicos para que pueda consultar las opciones por nombre.

El análisis de los datos se retrasa hasta la primera consulta que realice contra el objeto Zend_Console_Getopt para averiguar si se indicó una opción; el objeto realiza entonces su análisis. Esto le permite utilizar varias llamadas a métodos para configurar las opciones, argumentos, cadenas de ayuda y opciones de configuración antes de que se realice el análisis.

23.3.1. Manejo de excepciones de Getopt

Si el usuario indicó alguna opción no válida en la línea de comandos, la función de análisis lanza una Zend_Console_Getopt_Exception. Debe capturar esta excepción en el código de su aplicación. Puede usar el método parse() para forzar al objeto a analizar los argumentos. Esto es útil porque puede invocar parse() en un bloque try. Si se ejecuta correctamente, puede estar seguro de que el análisis no volverá a lanzar una excepción. La excepción lanzada tiene un método personalizado getUsageMessage(), que devuelve como cadena el conjunto formateado de mensajes de uso de todas las opciones declaradas.

Ejemplo 23.3. Captura de excepciones de Getopt

try {
    $opts = new Zend_Console_Getopt('abp:');
    $opts->parse();
} catch (Zend_Console_Getopt_Exception $e) {
    echo $e->getUsageMessage();
    exit;
}

Los casos en los que el análisis lanza una excepción incluyen:

  • La opción indicada no se reconoce.

  • La opción requiere un parámetro, pero no se proporcionó ninguno.

  • El parámetro de la opción es del tipo incorrecto. Por ejemplo, una cadena no numérica cuando se requería un entero.

23.3.2. Obtención de opciones por nombre

Puede usar el método getOption() para consultar el valor de una opción. Si la opción tenía un parámetro, este método devuelve el valor del parámetro. Si la opción no tenía parámetro pero el usuario sí la especificó en la línea de comandos, el método devuelve TRUE. En caso contrario, el método devuelve NULL.

Ejemplo 23.4. Uso de getOption()

$opts = new Zend_Console_Getopt('abp:');
$b = $opts->getOption('b');
$p_parameter = $opts->getOption('p');

Alternativamente, puede usar la función mágica __get() para recuperar el valor de una opción como si fuera una variable miembro de la clase. También se implementa el método mágico __isset().

Ejemplo 23.5. Uso de los métodos mágicos __get() e __isset()

$opts = new Zend_Console_Getopt('abp:');
if (isset($opts->b)) {
    echo "I got the b option.\n";
}
$p_parameter = $opts->p; // null if not set

Si sus opciones se declaran con alias, puede utilizar cualquiera de los alias de una opción en los métodos anteriores.

23.3.3. Informe de opciones

Existen varios métodos para informar del conjunto completo de opciones indicadas por el usuario en la línea de comandos actual.

  • Como cadena: use el método toString(). Las opciones se devuelven como una cadena de pares flag=value separados por espacios. El valor de una opción que no tiene un parámetro es la cadena literal "TRUE".

  • Como array: use el método toArray(). Las opciones se devuelven en un array simple indexado por enteros de cadenas, las cadenas de la bandera seguidas de las cadenas de parámetros, si las hay.

  • Como cadena que contiene datos JSON: use el método toJson().

  • Como cadena que contiene datos XML: use el método toXml().

En todos los métodos de volcado anteriores, la cadena de la bandera es la primera cadena de la lista de alias correspondiente. Por ejemplo, si los alias de la opción se declararon como verbose|v, entonces la primera cadena, verbose, se utiliza como el nombre canónico de la opción. El nombre de la bandera de opción no incluye ningún guion precedente.

23.3.4. Obtención de argumentos que no son opciones

Después de analizar las opciones y sus parámetros desde la línea de comandos, puede que queden argumentos adicionales. Puede consultar estos argumentos usando el método getRemainingArgs(). Este método devuelve un array con las cadenas que no formaban parte de ninguna opción.

Ejemplo 23.6. Uso de getRemainingArgs()

$opts = new Zend_Console_Getopt('abp:');
$opts->setArguments(array('-p', 'p_parameter', 'filename'));
$args = $opts->getRemainingArgs(); // returns array('filename')

Zend_Console_Getopt admite la convención de GNU según la cual un argumento formado por un doble guion indica el fin de las opciones. Cualquier argumento posterior a este indicador debe tratarse como argumento que no es una opción. Esto es útil si tiene un argumento que no es una opción y comienza con un guion. Por ejemplo: "rm -- -filename-with-dash".