strlen (strim ($str))
这是获取字符串长度的函数,如何写成链式操作?
$str -> trim() -> strlen()
提示:
先实现一个String类,对这个类的对象调用方法进行处理时,触发__call魔术方法,接着执行call_user_func即可
strlen (strim ($str))
这是获取字符串长度的函数,如何写成链式操作?
$str -> trim() -> strlen()
提示:
先实现一个String类,对这个类的对象调用方法进行处理时,触发__call魔术方法,接着执行call_user_func即可
<?php
/**
* Created by PhpStorm.
* User: hongxu
* Date: 16/8/4
* Time: 13:21
*/
class str {
private $str = '';
/**
* str constructor.
*/
public function __construct($str) {
$this->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)
<?php
class Str {
private $value = '';
public function __construct($str) {
$this->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即可。
请看如下代码,即可实现您的功能:
<?php
//演示链式调用
class MyString{
private $string;
function MyString($str){
$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();
?>
2 回答1.3k 阅读✓ 已解决
2 回答824 阅读✓ 已解决
1 回答899 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
2 回答881 阅读
1 回答873 阅读
1 回答803 阅读
源码如下