This repository has been archived by the owner on Dec 27, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathQuery.php
142 lines (126 loc) · 2.68 KB
/
Query.php
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
136
137
138
139
140
141
142
<?php
/**
* Query.php
*
* Author: Larry Li <[email protected]>
*/
namespace larryli\ipv4;
/**
* Class Query
* @package larryli\ipv4
*/
abstract class Query extends Object implements \Countable, \Iterator
{
/**
* @var Query[]
*/
protected $providers = [];
/**
* return 0.1s
*
* @return int
*/
static public function time()
{
return intval(microtime(true) * 10);
}
/**
* @param $name
* @param $options
* @return Query
* @throws \Exception
*/
public static function create($name, $options)
{
if (is_array($options) && isset($options['class'])) {
$class = $options['class'];
$options = @$options['options'];
} else {
$class = __NAMESPACE__ . "\\" . ucfirst($name) . 'Query';
}
if (!class_exists($class)) {
throw new \Exception("{$class} not found");
}
return new $class($options);
}
/**
* @return string
*/
public function __toString()
{
return $this->name();
}
/**
* name of the query
*
* @return string name string
*/
abstract public function name();
/**
* check data is exists
*
* @return bool false meed the query need generate()
*/
abstract public function exists();
/**
* initialize data with provider
*
* @param null|callback $func notify function
* @return void
*/
abstract public function init(callable $func = null);
/**
* clean data
*
* @return void
*/
abstract public function clean();
/**
* query ip division
*
* @param $ip
* @return string
*/
abstract public function find($ip);
/**
* query ip division id
*
* @param $ip
* @return integer
*/
abstract public function findId($ip);
/**
* translate division id to division
*
* @param integer $integer division id
* @return string division
*/
abstract public function divisionById($integer);
/**
* translate division to division id
*
* @param string $string division
* @return integer division id
*/
abstract public function idByDivision($string);
/**
* @return Query[]
*/
public function getProviders()
{
return $this->providers;
}
/**
* @param Query[] $providers
* @return mixed
*/
public function setProviders(array $providers)
{
$this->providers = [];
foreach ($providers as $provider) {
if (Query::is_a($provider)) {
$this->providers[] = $provider;
}
}
}
}