Po mom mišljenju, komandne linije interfejsa za PHP, na žalost, nema. Da bi se zadovoljila očekivanja korisnika i programera najbolje je da pratite utvrđene standarde. Kad god je to moguće, programer treba da prati POSIKS smernice. Ipak, u mnogim slučajevima GNU proširenja su preferirana i očekivana. Da bi ispunili ta očekivanja, ja sam portovao GNU Getopt u php.
Ovaj paket je baziran na 1998 Java port-u Getopt-a od Aaron M. Rena. Kad god je moguće, pokušao sam da ostanem veran duhu njegovog originalnog porta.To je relativno lak zadatak zbog sličnosti između Jave i PHP5. Trenutno, jedina stvar koja nedostaje je višejezička podrška. Za tu funkciju,nadam se da ću dobiti pomoć od međunarodne zajednice.
GNU Getopt paket se sastoji od dve klase datoteka:
gnu/getopt/Getopt.php
gnu/getopt/Longopt.php
Da biste instalirali paket, uradite ‘copt’ gnu direktorijuma najviseg nivoa u vašu uključenu putanju.Da biste pronašli direktorijume uključene u toj putanji, uradite sledeće u komandnoj liniji:
php -r "echo ini_get('include_path');"
U mom slučaju, rezultat je bio ‘.:/usr/share/pear:/usr/share/php’. Da bi instalirao paket, ja sam kopirao ‘gnu’ into /usr/share/php.
Paket sadrži demo program pod nazivom ‘optdemo'. Evo koda iz tog programa:
#!/usr/bin/php
<?php
require_once("gnu/getopt/Getopt.php");
require_once("gnu/getopt/Longopt.php");
$longopt = array();
$longopt[0] = new LongOpt("help", NO_ARGUMENT, null, 'h');
$longopt[1] = new LongOpt("about", REQUIRED_ARGUMENT, null, 'a');
$getopt = new Getopt($argv, "a:bc:d:hW;", $longopt);
$c;
$arg;
while (($c = $getopt->getopts()) != -1) {
switch($c) {
case 'a':
case 'd':
$arg = $getopt->getOptarg();
print(
"You picked $c with an argument of ".(($arg != null) ?
$arg : "null")."\n"
);
break;
case 'b':
case 'c':
$arg = $getopt->getOptarg();
print(
"You picked $c with an argument of ".(($arg != null)
? $arg : "null")."\n"
);
break;
case 'h':
print "Usage: test [options] \n";
break;
case '?':
break; // getopt() already printed an error
default:
print("getopt() returned $c\n");
}
}
?>
Kao što možete da vidite, implementacija je prilično direktna.Niz Longopt objekata je opcioni. Svaki Longopt treba da sadrži odgovarajući Shortopt u Getopt klasi. Shortopt-ovi su konstruisani upravo onako kako ste očekivali. Uzmite u obzir opciju String “a:bc:d:hW;” Svaka opcija ispred koje je kolona očekuje argument.U Ovom slučaju,‘ a ’ ' c 'i' d 'zahtevaju argumente, dok' b 'i' h 'ne.Getopts metoda je iterator. Možete koristiti loop petlju kroz opcije i rukovati njima u petlji sličnoj loop-u
kao u prikazanom u primeru.
Softver je dostupan ovde:
GNU Getopt For PHP
Srećno hakovanje