したがって、渡されるコマンドライン引数を解析するパーサを作成する必要があります。以下は私がこれまで持っていたコードです。コマンドライン引数/ argvを解析する
public function parse($argv = null)
{
$argv = $this->argsUnparsed;
$argvs = array();
array_shift($argvs);
foreach($argv as $arg)
{
// This is supposed to find the -- characters in a string
if(substr($arg,0,2) == '--')
{
$equals = strpos($arg, '=');
// If character in string equals '=' saving anything before it as a key and anything afterward as a value
if($equals)
{
$argvs[substr($arg,2,$equals - 2)] = substr($arg,$equals + 1);
}
else
{
$k = substr($arg,2);
if(!isset($argvs[$k]))
{
$argvs[$k] = true;
}
}
}
else if(substr($arg,0,1) == '-')
{
foreach(str_split(substr($arg,1)) as $k)
{
if(!isset($argvs[$k]))
{
$argvs[$k] = true;
}
elseif($equals == false)
{
$argvs[substr($arg,2,$equals - 2)] = substr($arg,$equals + 1);
}
}
}
else
{
$argvs[] = $arg;
}
}
return $argvs;
}
これはコマンドライン引数を解析する機能です。私が入力したときに私の問題は、それが
Array
(
[0] => testArgs.php
[v] => 1
[T] => 1
[1] => 4
[l] => 1
[2] => val1,val2,val3
[names] => Austin,Duncan,Eddie
[type] => gold
)
として、それをプリントアウトし、 "PHP testArgs.php -v -T 4 -l VAL1、VAL2、val3は--names =オースティン、ダンカン、エディ--type =金" ということです
2番目と最後の2つのアレイスロットは完全に正しいですが、残りの部分は次のように出力されるべきです(SHOULD)。
[T] => 4
[l] => val1,val2,val3
また、最初の配列キー値のペア[0] => testArgs.phpは表示しないでください。
を、あなたは' = 'の位置をチェックしていますが、' --'以内に使用するのと同じ '$ equals'変数を使用していません。また、 ' - '引数に '= '記号を使用していないので、次の引数を調べて' -'で始まり、その値を割り当て(そして次にスキップする)か 'true 'もしそうでなければ。さらに、これは複数の '-'引数の問題を引き起こすので、最後の引数のためにこれを行う必要があります(または、値を持つためには一度に1文字にする必要があります)。これが正しく動作するためには、foreachではなくforループを提案します。 –
また、関数内で最初に行うことが '$ this-> argsUnparsed'で上書きされた場合、関数に渡す引数' $ argv'を持つ点は何ですか?関数の引数を取り除くか、引数を上書きして渡された行を使用しないでください。後者は、関数がそのクラス内に依存せず他の場所でも使用できるためです。 –