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.
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.
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.
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.
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".