|
1 | 1 | <?php |
2 | 2 | require_once __DIR__ . '/vendor/autoload.php'; |
3 | 3 |
|
4 | | -$config = array( |
5 | | - 'compilePath' => __DIR__ . '/var/ckcr_compiled/', |
6 | | - 'preDefined' => array( |
7 | | - 'user' => 'aarr|include:name;id{ |
8 | | - name: str, |
9 | | - id: int, |
10 | | - }', |
11 | | - 'show' => 'aarr|include:id;url{ |
12 | | - id: int, |
13 | | - url: str, |
14 | | - }', |
15 | | - ), |
16 | | -); |
| 4 | +############################# Env本身定义了一个抽象概念, 需要根据不同的运营环境定义不同的实现. 比如, 对于客户端App |
| 5 | +class AppEnv extends \ClientAdapter\Env { |
| 6 | + public $osName; |
| 7 | + public $appVersion; |
| 8 | +} |
17 | 9 |
|
18 | | -$data = array( |
19 | | - 'user' => array( |
20 | | - 'id' => 1, |
21 | | - 'name' => 'goosman-lei', |
22 | | - 'age' => 30, |
23 | | - ), |
24 | | - 'shows' => array( |
| 10 | +############################ 客户端适配器, 本身提供了一种规则校验, 下面以我们的Feature应用场景示例 |
| 11 | +class Feature { |
| 12 | + protected static $features = array(); |
| 13 | + |
| 14 | + public static function init($featuresConfig) { |
| 15 | + foreach ($featuresConfig as $featureName => $envDesc) { |
| 16 | + if (\ClientAdapter\Env::checkEnv($envDesc)) { |
| 17 | + self::$features[$featureName] = TRUE; |
| 18 | + } |
| 19 | + } |
| 20 | + } |
| 21 | + |
| 22 | + public static function isEnable($featureName) { |
| 23 | + return array_key_exists($featureName, self::$features) && self::$features[$featureName] === TRUE; |
| 24 | + } |
| 25 | +} |
| 26 | + |
| 27 | + |
| 28 | +########################## OK. 下面是应用中使用Feature的应用场景 |
| 29 | + |
| 30 | +echo "app start\n\n"; |
| 31 | + |
| 32 | +echo "prePare Env\n\n"; |
| 33 | +$appEnv = new \AppEnv(); |
| 34 | +$appEnv->sessUid = rand(0, 10000); |
| 35 | +$appEnv->clientIp = long2ip(rand(0, pow(2, 32))); |
| 36 | +$appEnv->latitude = rand(0, 1000000) / 1000; |
| 37 | +$appEnv->longitude = rand(0, 1000000) / 1000; |
| 38 | +$appEnv->osName = rand(0, 1) ? 'ios' : 'android'; |
| 39 | +$appEnv->appVersion = rand(0, 100) / 10; |
| 40 | + |
| 41 | +\ClientAdapter\Env::setCurrEnv($appEnv); |
| 42 | + |
| 43 | +echo "Features init\n\n"; |
| 44 | +$featuresConfig = array( |
| 45 | + 'support-hail' => array( # ios 5.2及以上版本; android 5.3及以上版本. 支持打招呼功能 |
25 | 46 | array( |
26 | | - 'id' => 1, |
27 | | - 'url' => 'http://img.oneniceapp.com/1.jpg', |
| 47 | + 'osName eq ios', |
| 48 | + 'appVersion v>= 5.2', |
28 | 49 | ), |
29 | 50 | array( |
30 | | - 'id' => 2, |
31 | | - 'url' => 'http://img.oneniceapp.com/2.jpg', |
| 51 | + 'osName eq android', |
| 52 | + 'appVersion v>= 5.3', |
32 | 53 | ), |
33 | 54 | ), |
| 55 | + 'support-emotion' => array( # ios 5.3及以上版本, 10%小流量用户开启表情功能 |
| 56 | + 'osName eq ios', |
| 57 | + 'appVersion v>= 5.3', |
| 58 | + 'sessUid <=% 100:10', |
| 59 | + ), |
34 | 60 | ); |
| 61 | +Feature::init($featuresConfig); |
35 | 62 |
|
| 63 | +echo "Business code is\n"; |
| 64 | +if (Feature::isEnable('support-hail')) { |
| 65 | + echo "\tHere is hail code\n"; |
| 66 | +} |
| 67 | +if (Feature::isEnable('support-emotion')) { |
| 68 | + echo "\tHere is emotion code\n"; |
| 69 | +} |
36 | 70 |
|
37 | | -$ckcrHandler = new \Ckcr\Handler($config); |
38 | | - |
39 | | - |
40 | | - |
41 | | -echo '==================直接的应用' . chr(10); |
42 | | -$ckcr = 'aarr{ |
43 | | - user: aarr|include:name;id{ |
44 | | - name: str, |
45 | | - id: int, |
46 | | - }, |
47 | | - shows: iarr{ |
48 | | - *: aarr|include:url{ |
49 | | - url: str, |
50 | | - } |
51 | | - } |
52 | | -}'; |
53 | | -$ckcrProxy = $ckcrHandler->getProxy($ckcr); |
54 | | -$ckcrProxy->ckcr($data); |
55 | | -echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . chr(10); |
56 | | - |
57 | | - |
58 | | -echo '==================带预处理的例子' . chr(10); |
59 | | -$ckcr = 'aarr{ |
60 | | - user: {@user@}, |
61 | | - shows: iarr{ |
62 | | - *: {@show@}, |
63 | | - } |
64 | | -}'; |
65 | | -$ckcrProxy = $ckcrHandler->getProxy($ckcr); |
66 | | -$ckcrProxy->ckcr($data); |
67 | | -echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . chr(10); |
| 71 | +echo "\nAppEnv is:\n"; |
| 72 | +echo json_encode((array)$appEnv, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . chr(10); |
0 commit comments