Created
April 10, 2011 06:51
-
-
Save hakre/912111 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* CommandLine class | |
* | |
* @package Framework | |
*/ | |
/** | |
* Command Line Interface (CLI) utility class. | |
* | |
* @author Patrick Fisher <[email protected]> | |
* @since August 21, 2009 | |
* @package Framework | |
* @subpackage Env | |
*/ | |
class CommandLine { | |
public static $args; | |
/** | |
* PARSE ARGUMENTS | |
* | |
* This command line option parser supports any combination of three types | |
* of options (switches, flags and arguments) and returns a simple array. | |
* | |
* [pfisher ~]$ php test.php --foo --bar=baz | |
* ["foo"] => true | |
* ["bar"] => "baz" | |
* | |
* [pfisher ~]$ php test.php -abc | |
* ["a"] => true | |
* ["b"] => true | |
* ["c"] => true | |
* | |
* [pfisher ~]$ php test.php arg1 arg2 arg3 | |
* [0] => "arg1" | |
* [1] => "arg2" | |
* [2] => "arg3" | |
* | |
* [pfisher ~]$ php test.php plain-arg --foo --bar=baz --funny="spam=eggs" --also-funny=spam=eggs \ | |
* > 'plain arg 2' -abc -k=value "plain arg 3" --s="original" --s='overwrite' --s | |
* [0] => "plain-arg" | |
* ["foo"] => true | |
* ["bar"] => "baz" | |
* ["funny"] => "spam=eggs" | |
* ["also-funny"]=> "spam=eggs" | |
* [1] => "plain arg 2" | |
* ["a"] => true | |
* ["b"] => true | |
* ["c"] => true | |
* ["k"] => "value" | |
* [2] => "plain arg 3" | |
* ["s"] => "overwrite" | |
* | |
* @author Patrick Fisher <[email protected]> | |
* @since August 21, 2009 | |
* @see http://www.php.net/manual/en/features.commandline.php | |
* #81042 function arguments($argv) by technorati at gmail dot com, 12-Feb-2008 | |
* #78651 function getArgs($args) by B Crawford, 22-Oct-2007 | |
* @usage $args = CommandLine::parseArgs($_SERVER['argv']); | |
*/ | |
public static function parseArgs($argv){ | |
array_shift($argv); | |
$out = array(); | |
foreach ($argv as $arg){ | |
// --foo --bar=baz | |
if (substr($arg,0,2) == '--'){ | |
$eqPos = strpos($arg,'='); | |
// --foo | |
if ($eqPos === false){ | |
$key = substr($arg,2); | |
$value = isset($out[$key]) ? $out[$key] : true; | |
$out[$key] = $value; | |
} | |
// --bar=baz | |
else { | |
$key = substr($arg,2,$eqPos-2); | |
$value = substr($arg,$eqPos+1); | |
$out[$key] = $value; | |
} | |
} | |
// -k=value -abc | |
else if (substr($arg,0,1) == '-'){ | |
// -k=value | |
if (substr($arg,2,1) == '='){ | |
$key = substr($arg,1,1); | |
$value = substr($arg,3); | |
$out[$key] = $value; | |
} | |
// -abc | |
else { | |
$chars = str_split(substr($arg,1)); | |
foreach ($chars as $char){ | |
$key = $char; | |
$value = isset($out[$key]) ? $out[$key] : true; | |
$out[$key] = $value; | |
} | |
} | |
} | |
// plain-arg | |
else { | |
$value = $arg; | |
$out[] = $value; | |
} | |
} | |
self::$args = $out; | |
return $out; | |
} | |
/** | |
* GET BOOLEAN | |
*/ | |
public static function getBoolean($key, $default = false){ | |
if (!isset(self::$args[$key])){ | |
return $default; | |
} | |
$value = self::$args[$key]; | |
if (is_bool($value)){ | |
return $value; | |
} | |
if (is_int($value)){ | |
return (bool)$value; | |
} | |
if (is_string($value)){ | |
$value = strtolower($value); | |
$map = array( | |
'y' => true, | |
'n' => false, | |
'yes' => true, | |
'no' => false, | |
'true' => true, | |
'false' => false, | |
'1' => true, | |
'0' => false, | |
'on' => true, | |
'off' => false, | |
); | |
if (isset($map[$value])){ | |
return $map[$value]; | |
} | |
} | |
return $default; | |
} | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@see https://github.com/pwfisher/CommandLine.php