-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathCall.php
More file actions
135 lines (124 loc) · 5.51 KB
/
Copy pathCall.php
File metadata and controls
135 lines (124 loc) · 5.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
namespace Bricks\Cli\Routing;
/**
* Представляет запрос, использованный при вызове PHP интерпретатора из
* командной строки.
*
* Экземпляр данного класса хранит значения опций запроса и данные со
* стандартного потока ввода. Он может использоваться для доступа к данным,
* передаваемым скрипту при вызове.
*
* @author Artur Sh. Mamedbekov
*/
class Call{
/**
* @var string Адрес вызванного PHP скрипта относительно каталога, являющегося
* текущим в момент вызова интерпретатора.
*/
private $name;
/**
* @var array Опций запроса. Если в конструкторе не определены шаблоны
* допустимых опций, в данном массиве значения хранятся в порядке следования,
* иначе используется ассоциативный массив с именами опций в качестве ключей.
*/
private $options;
/**
* @var string Данные, прочитанные из потока ввода.
*/
private $input;
/**
* Конструктор класса.
*
* Конструктор определяет шаблоны разбора допустимых опций вызова, что
* позволяет ассоциировать их с удобочитаемыми именами.
* Пример создания объекта запроса, ожидающего в качестве опций однобуквенные
* опции '-a' и '-h', и многобуквенные опции '--all', '--hight':
* $call = new Call('a::h', ['all::', 'hight']);
*
* @param string $options [optional] Шаблон допустимых, однобуквенных (с
* префиксом -) опций вызова.
* Правила определяются в шаблоне в следующем виде:
* - a - допустима опция '-a' без значения
* - a: - допустима опция '-a' с обязательным значением
* - a:: - допустима опция '-a' с необязательным значением
* @param array $longoptions [optional] Шаблон допустимых, многобуквенных (с
* префиксом --) опций вызова.
* Правила определяются в шаблоне в виде ассоциативного массива со следующей
* структурой:
* [
* 'action', - допустима опция '--action' без значения
* 'action:', - допустима опция '--action' с обязательным значением
* 'action::', - допустима опция '--action' с необязательным значением
* ]
*/
public function __construct($options = null, $longoptions = null){
global $argv;
$this->name = $argv[0];
if(is_null($options)){
$this->options = $argv;
array_shift($this->options);
}
else{
if(is_null($longoptions)){
$longoptions = [];
}
$this->options = getopt($options, $longoptions);
}
}
/**
* Получает адрес вызванного PHP скрипта относительно каталога, являющегося
* текущим в момент вызова интерпретатора.
*
* @return string Адрес вызванного PHP скрипта.
*/
public function name(){
return $this->name;
}
/**
* Получает опции вызова или значение конкретной опции.
*
* @param int|string $name [optional] Имя или индекс целевой опции. Если
* параметр не задан, возвращаются все опции вызова.
*
* @return string|array|null Значение целевой опции или null - если опция не
* задана. Если параметр не передан, возвращаются все опции вызова.
*/
public function opt($name = null){
if(is_null($name)){
return $this->options;
}
if(!isset($this->options[$name])){
return null;
}
return $this->options[$name];
}
/**
* Получает значение переменной окружения.
*
* @param string $name Имя целевой переменной окружения.
*
* @return string|null Значение переменной окружения или null - если
* переменная не задана.
*/
public function env($name){
$value = getenv($name);
if($value === false){
return null;
}
return $value;
}
/**
* Получает все содержимое входного потока.
*
* @warning Метод может привести к зависанию, если на момент вызова во входном
* потоке не было данных.
*
* @return string Содержимое входного потока.
*/
public function input(){
if(is_null($this->input)){
$this->input = file_get_contents('php://stdin');
}
return $this->input;
}
}