当前位置:Gxlcms > PHP教程 > php的链式调用

php的链式调用

时间:2021-07-01 10:21:17 帮助过:4人阅读

strlen (strim ($str))这是获取字符串长度的函数,如何写成链式操作?

$str -> trim() -> strlen()

提示:

先实现一个String类,对这个类的对象调用方法进行处理时,触发__call魔术方法,接着执行call_user_func即可

回复内容:

strlen (strim ($str))这是获取字符串长度的函数,如何写成链式操作?

$str -> trim() -> strlen()

提示:

先实现一个String类,对这个类的对象调用方法进行处理时,触发__call魔术方法,接着执行call_user_func即可

源码如下


 * @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(); ?>

str = $str;
    }

    public function trim() {
        $this->str = trim($this->str);
        return $this;
    }

    public function strlen() {
        return strlen($this->str);
    }
}

$str = new str('要思考,不做伸手党');

var_dump($str->trim()->strlen());die;

output:

php test.php
int(25)

value = $str;
    }

    public function __call($name, $args) {
        if (function_exists($name)) {
            array_unshift($args, $this->value);
            $value = call_user_func_array($name, $args);
            if (is_string($value)) {
                return new static($value);
            } else {
                return $value;
            }
        }
    }

    public function __toString() {
        return $this->value;
    }
}

$str = new Str('  题主是不是个伸手党?  ');

echo($str->trim() . PHP_EOL);
echo($str->trim()->strlen() . PHP_EOL);
$trim_str = $str->trim();
echo($trim_str->substr(0, $trim_str->strlen() - 1) . PHP_EOL);
题主是不是个伸手党?
28
题主是不是个伸手党

要实现这样的功能并不难,只需要对string进行封装一下。如果需要链式调用,则可台返回$this即可。
请看如下代码,即可实现您的功能:

string=$str;
    }
    
    function len(){
        return strlen($this->string);
    }
    
    function _trim(){
        $this->string=trim($this->string);
        return $this;
    }
}

$d=new MyString(' sdfsdf  ');
echo $d->_trim()->len();
?>

->为什么要空格 = =,看上去好奇怪

人气教程排行