您现在的位置是:首页 > 正文

php 全局函数 加到类,全局PHP函数通过类链接

2024-02-01 01:32:37阅读 3

是否可以通过对象/类链接所有PHP函数?

我有这个想法,我想这样的事情:

$c = new Chainer();

$c->strtolower('StackOverFlow')->ucwords(/* the value from the first function argument */)->str_replace('St', 'B', /* the value from the first function argument */);

这应该产生:

Backoverflow

谢谢.

解决方法:

你的意思是做str_replace(‘St’,’B’,ucwords(strtolower(‘StackOverFlow’)))?

您在上面调用的方法是函数,而不是绑定到任何类的方法. Chainer必须实施这些方法.如果这是你想要做的(也许是为了一个不同的目的,这只是一个例子)你的Chainer实现可能如下所示:

class Chainer {

private $string;

public function strtolower($string) {

$this->string = strtolower($string);

return $this;

}

public function ucwords() {

$this->string = ucwords($this->string);

return $this;

}

public function str_replace($from, $to) {

$this->string = str_replace($from, $to, $this->string);

return $this;

}

public function __toString() {

return $this->string;

}

}

这在上面的例子中会有所作为,但你会这样称呼它:

$c = new Chainer;

echo $c->strtolower('StackOverFlow')

->ucwords()

->str_replace('St', 'B')

; //Backoverflow

请注意,您永远不会从第一个函数参数* /中获取/ *值的值,因为这没有意义.也许你可以用一个全局变量来做,但那将是非常可怕的.

关键是,你可以通过每次返回$this来链接方法.下一个方法是在返回的值上调用的,因为你返回了它是同一个对象(返回$this).重要的是要知道哪些方法启动和停止链.

我认为这种实现最有意义:

class Chainer {

private $string;

public function __construct($string = '') {

$this->string = $string;

if (!strlen($string)) {

throw new Chainer_empty_string_exception;

}

}

public function strtolower() {

$this->string = strtolower($this->string);

return $this;

}

public function ucwords() {

$this->string = ucwords($this->string);

return $this;

}

public function str_replace($from, $to) {

$this->string = str_replace($from, $to, $this->string);

return $this;

}

public function __toString() {

return $this->string;

}

}

class Chainer_empty_string_exception extends Exception {

public function __construct() {

parent::__construct("Cannot create chainer with an empty string");

}

}

try {

$c = new Chainer;

echo $c->strtolower('StackOverFlow')

->ucwords()

->str_replace('St', 'B')

; //Backoverflow

}

catch (Chainer_empty_string_exception $cese) {

echo $cese->getMessage();

}

标签:php,methods,chaining

来源: https://codeday.me/bug/20190715/1471366.html

网站文章

  • MyBatis-Plus乐观锁插件

    MyBatis-Plus乐观锁插件

    1、模拟修改冲突 1、创建一个数据库,添加一个数据 CREATE TABLE t_product( `id` BIGINT(20) not null COMMENT '主键ID', `...

    2024-02-01 01:32:28
  • Linux学习-35-sudo命令

    Linux学习-35-sudo命令

    Linux学习-35-sudo命令

    2024-02-01 01:31:53
  • 怎么在linux服务器里添加22,Linux服务器部署Yapi

    怎么在linux服务器里添加22,Linux服务器部署Yapi

    一,环境配置Centos7 + Node10.13.0 + MongoDB3.2.22安装必备的依赖工具:gcc-c++ wgetyum -y install gcc-c++ wget二,Node安装...

    2024-02-01 01:31:46
  • 一文带你了解自动化测试是什么?

    一文带你了解自动化测试是什么?

    1、什么是自动化测试?自动化测试是软件测试活动中的一个重要分支和组成部分。随着软件产业的不断发展,市场对软件周期的要求越来越高,于是催生了各种开发模式,如大家熟知的敏捷开发,从而对测试提出了更高的要求...

    2024-02-01 01:31:36
  • 百度网盘这个开关建议你关闭!会偷偷吃掉1MB/s上传带宽

    百度网盘这个开关建议你关闭!会偷偷吃掉1MB/s上传带宽

    作为目前硕果仅存的网盘服务之一,百度网盘的一举一动都备受关注。最近,可以破解百度网盘下载速度限制的Pandownload终于还是倒下了,开发者也被拘捕。百度网盘最为人诟病的就是如果不掏钱...

    2024-02-01 01:31:06
  • 项目实战——创建菜单与游戏页面(下)

    项目实战——创建菜单与游戏页面(下)

    画蛇及键盘响应实现!

    2024-02-01 01:30:57
  • 关于MySQL中文乱码显示???解决办法

    关于MySQL中文乱码显示???解决办法

    描述 电脑配置:win10系统,MySQL版本5.7.19 用sqlyog设置的utf8只能在软件里面显示正常,而当我用eclipse连接数据库进行数据库内容输入输出时,中文就会显示??? 解决办法 ...

    2024-02-01 01:30:50
  • 11个 React 图片库演示示例

    11个 React 图片库演示示例

    来源 | https://us.niemvuilaptrinh.com/article/13-examples-of-react-photo-gallery-for-website在今天的...

    2024-02-01 01:30:42
  • commons-collections包中的常用的工具类

    commons-collections包中的常用的工具类

    commons-collections包中的常用的工具类 <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> &...

    2024-02-01 01:30:13
  • SpringBoot集成logstash

    SpringBoot集成logstash

    前言 原网址:https://www.jianshu.com/p/b6977babcc7e 大家应该都听说过ELK,一般ELK都是用来做分布式系统的集中日志管理,ELK的优点这里就不介绍了,好处太多,今天主要介绍下其中的Logstash。数据传给logstash,它将数据进行过滤和格式化(转成JSON格式),然后传给数据存储或者消息队列Broker,用于后续加工处理。 最近要做app埋点监控...

    2024-02-01 01:30:05