php实现无顺序的连贯操作
2018-03-15 14:52
363 查看
用过tp的朋友们一定知道他封装的连贯操作,这里简单介绍一下如何实现 无顺序的连贯调用。以及他的原理。(大神略过....)
首先说下两个要点,
一、无顺序
既然是无顺序,那就意味着可以先调用任何一个方法,如何实现呢 ,答案很简单那就是保证每个方法都返回 $this(也就是当前被实例化的对象)。
二调用php函数
这里有两个知识点
①__call(不知道的可以去看手册啊,手册上讲的很清楚)。
②call_user_func_array();还有一个call_user_func()不过没有call_user_func_array()牛逼。
在连贯操作中如果你调用一个未定义的方法,毫无疑问肯定会报错。这个时候就要用到__call,然后使用call_user_func_array去调用php函数。
③多讲一嘴 mergeStr中 有用到一个func_get_args,当函数的参数不确定的时候该函数灰常有用,一定要mark呦
下面举一个小小的例子,以供参考.
class Str
{
public $value;
public function __construct($str=null)
{
$this->value = $str;
}
//合并随机数
public function mergeRand()
{
$rand = mt_rand(10000, 99999);
$this->value .= $rand;
return $this;
}
//合并自定义子串
public function mergeStr()
{
$arr = func_get_args();
if($arr) {
foreach ($arr as $ar)
{
$this->value .= $ar;
}
}
return $this;
}
//添加时间戳
public function addUnix()
{
$this->value .= '_' . time();
return $this;
}
/* public function __call($name, $args)
{
$this->value = call_user_func($name, $this->value, $args[0]);
return $this;
}*/
public function __call($name, $args)
{
array_unshift($args, $this->value);
$this->value = call_user_func_array($name, $args);
return $this;
}
}
$str = new Str(',aaaabbbb,');
echo $str->trim(',')->mergeStr('CC','DD')->addUnix()->mergeRand()->md5()->value;
die;
首先说下两个要点,
一、无顺序
既然是无顺序,那就意味着可以先调用任何一个方法,如何实现呢 ,答案很简单那就是保证每个方法都返回 $this(也就是当前被实例化的对象)。
二调用php函数
这里有两个知识点
①__call(不知道的可以去看手册啊,手册上讲的很清楚)。
②call_user_func_array();还有一个call_user_func()不过没有call_user_func_array()牛逼。
在连贯操作中如果你调用一个未定义的方法,毫无疑问肯定会报错。这个时候就要用到__call,然后使用call_user_func_array去调用php函数。
③多讲一嘴 mergeStr中 有用到一个func_get_args,当函数的参数不确定的时候该函数灰常有用,一定要mark呦
下面举一个小小的例子,以供参考.
class Str
{
public $value;
public function __construct($str=null)
{
$this->value = $str;
}
//合并随机数
public function mergeRand()
{
$rand = mt_rand(10000, 99999);
$this->value .= $rand;
return $this;
}
//合并自定义子串
public function mergeStr()
{
$arr = func_get_args();
if($arr) {
foreach ($arr as $ar)
{
$this->value .= $ar;
}
}
return $this;
}
//添加时间戳
public function addUnix()
{
$this->value .= '_' . time();
return $this;
}
/* public function __call($name, $args)
{
$this->value = call_user_func($name, $this->value, $args[0]);
return $this;
}*/
public function __call($name, $args)
{
array_unshift($args, $this->value);
$this->value = call_user_func_array($name, $args);
return $this;
}
}
$str = new Str(',aaaabbbb,');
echo $str->trim(',')->mergeStr('CC','DD')->addUnix()->mergeRand()->md5()->value;
die;
相关文章推荐
- php连贯操作实现
- php连贯操作实现
- 【转】PHP实现连贯操作
- 如何自己实现php访问mysql的连贯操作
- PHP实现的连贯操作、链式操作实例
- php实现顺序栈的基本操作
- MySQL数据库操作类(PHP实现,支持连贯操作)
- php连贯操作实现
- PHP实现的连贯操作、链式操作实例
- PHP实现的连贯操作、链式操作实例
- PHP实现的连贯操作、链式操作实例
- php实现访客统计文件操作
- 用数组实现顺序存储二叉树及操作的实现
- [数据结构]c语言实现顺序栈的入栈,出栈,清空,销毁等操作
- php操作pdo实现插入
- php实现远程操作
- 关于PHP实现异步操作的研究
- C++实现顺序表的基本操作
- (1)顺序表的操作 ① 输入一组整型元素序列,建立线性表的顺序存储结构。 ② 实现该线性表的遍历。 ③ 在该顺序表中查找某一元素,查找成功显示查找元素,否则显示查找失败。 ④ 在该顺序表中删除或插入指