php的链式调用
本文介绍了php的链式调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
strlen (strim ($str))
这是获取字符串长度的函数,如何写成链式操作?
$str -> trim() -> strlen()
提示:
先实现一个String类,对这个类的对象调用方法进行处理时,触发__call魔术方法,接着执行call_user_func即可
解决方案
源码如下
<?php
/**
* 字符串处理
*
* @author Flc <2016-08-04 23:39:41>
* @link http://flc.ren
*/
class Str
{
/**
* 字符串
* @var [type]
*/
protected $string;
/**
* 支持的函数
* @var array
*/
protected $methods = ['trim', 'strlen'];
/**
* 初始化
* @param [type] $string [description]
*/
public function __construct($string)
{
$this->string = $string;
}
/**
* 单例模式
* @param string $string 字符串
* @return Object:Str
*/
public static function getInstance($string)
{
static $_instances = [];
if (isset($_instances[$string]))
return $_instances[$string];
return $_instances[$string] = new self($string);
}
/**
* 输出
* @return string
*/
public function response()
{
return $this->string;
}
/**
* 模式方法
* @param string $method 方法
* @return Object:Str
*/
public function __call($method, $args)
{
if (in_array($method, $this->methods)) {
if (function_exists($method)) {
$this->string = call_user_func($method, $this->string);
}
}
return $this;
}
}
// DEMO
echo Str::getInstance(' 123123 123')->trim()->strlen()->response();
?>
这篇关于php的链式调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文