Example #1
0
 public function testObject()
 {
     $obj = new stdClass();
     $obj->zero = 0;
     $obj->zero_float = 0.0;
     $obj->zero_str = '0';
     $obj->a = 'a';
     $obj->array = ['a', 'b', 'c'];
     $obj2 = new stdClass();
     $obj2->b = 'b';
     $obj2->c = 'c';
     $obj->obj = $obj2;
     $this->assertEquals($obj->a, depth_query($obj, 'a'));
     $this->assertEquals($obj->zero, depth_query($obj, 'zero'));
     $this->assertEquals($obj->array[0], depth_query($obj, 'array->0'));
     $this->assertEquals($obj->obj->b, depth_query($obj, 'obj->b'));
     $this->assertEquals($obj->zero_str, depth_query($obj, '->zero_str'));
     $this->assertEquals($obj->zero_float, depth_query($obj, '->zero_float->what'));
 }
Example #2
0
 /**
  * 文本字符替换(函数命名源自Mootools)。
  *
  * *原本作为Utils\String包里面的函数,现在将他提取到Common中。*
  *
  * ```php
  * // 基本的使用
  * $str = '你好,{name}!';
  * $args = ['name' => 'kephp'];
  * substitute($str, $args); // '你好,kephp!'
  *
  * // 如果变量不存在的话:
  * $str = '你好,{name}!今天是星期{weekDay}。';
  * substitute($str, $args); // '你好,kephp!今天是星期。'
  *
  * // 他会循环检查
  * $str = '你好,{name}!{tail}';
  * $args = [
  *     'name'    => 'kephp',
  *     'weekDay' => '六',
  *     'tail'    => '今天是星期{weekDay}。',
  * ];
  *
  * substitute($str, $args); // '你好,kephp!今天是星期六。'
  *
  * // 指定第三个参数,可以取得这次文本替换过程中所匹配到的keywords和对应的变量内容
  * substitute($str, $args, $matches); // matches将会包含: name, weekDay, tail
  * ```
  *
  * 本函数支持多层数组、对象的深度查询
  *
  * ```php
  * $str = '你好,{name}!{tail}{template}';
  * $args = [
  *     'name' => 'kephp',
  *     'message' => [
  *         'title' => '认识你很高兴!',
  *         'content' => '我想了解更多的讯息!',
  *     ],
  *     'template' => '<h1>{message->title}</h1><div>{message->content}</div>',
  *     'weekDay' => '六',
  *     'tail' => '今天是星期{weekDay}。',
  * ];
  * substitute($str, $args);
  * // 返回:你好,kephp!今天是星期六。<h1>认识你很高兴!</h1><div>我想了解更多的讯息!</div>
  * ```
  *
  * 第四个参数`$regex`,允许设定你自定义的变量的正则匹配表达式。
  *
  * @param string $str
  * @param array  $args
  * @param string $regex
  * @param array  $matches
  * @return string
  */
 function substitute(string $str, array $args = [], array &$matches = [], $regex = '#\\{([^\\{\\}\\r\\n]+)\\}#') : string
 {
     if (empty($str)) {
         return '';
     }
     if (empty($args)) {
         // 没有参数,就表示无需替换了
         return $str;
     }
     if (empty($regex)) {
         $regex = '#\\{([^\\{\\}\\r\\n]+)\\}#';
     }
     if (preg_match($regex, $str)) {
         $str = preg_replace_callback($regex, function ($m) use($args, &$matches) {
             $key = $m[1];
             $matches[$key] = '';
             // give a default empty string
             if (isset($args[$key]) || isset($args->{$key})) {
                 $matches[$key] = $args[$key];
             } else {
                 $matches[$key] = depth_query($args, $key, '');
             }
             return $matches[$key];
         }, $str);
         return substitute($str, $args, $matches, $regex);
     }
     return $str;
 }
Example #3
0
 /**
  * 查询并取回当前Uri的QueryString某个key的值
  *
  * 该函数允许深度查询
  *
  * ```php
  * $uri->query('id'); // 有则返回id,没有则返回null
  * $uri->query('id', false); // 指定当id不存在时的默认返回值
  * $uri->query('words->a');  // 深度查询
  * ```
  *
  * @param string|array $keys
  * @param null         $default
  * @return mixed
  */
 public function query($keys, $default = null)
 {
     if (isset($this->queryData[$keys])) {
         return $this->queryData[$keys];
     }
     return depth_query($this->queryData, $keys, $default);
 }
Example #4
0
 public function getSecurityData($field = null, $default = null)
 {
     if (!$this->securityPrepared) {
         $this->prepareSecurity();
     }
     if (isset($field)) {
         if (isset($this->securityData[$field])) {
             $value = $this->securityData[$field];
         } else {
             $value = depth_query($this->securityData, $field, $default);
         }
         $value = trim($value);
         return $value;
     }
     return $this->securityData;
 }
Example #5
0
 public function cookie($keys = null, $default = null)
 {
     if (empty($keys)) {
         return $this->cookies;
     }
     //		if (isset($this->cookies[$keys]))
     //			return $this->cookies[$keys];
     return depth_query($this->cookies, $keys, $default);
 }