php - 我如何指向另一个函数?这可能吗?
问题描述
目的是使函数的名称更短。
我有一个名为somedescriptivefunctionName
.
function somedescriptivefunctionName($a) {
echo $a;
}
我想将它分配给$this->f
这样我就不会乱扔长名称的代码。
$this->f('Yahoo!!'); // will echo 'Yahoo!!'
例如,我想象这样的事情:
$this->f = $this->somedescriptivefunctionName; // wrong way
这可能吗?
当然我可以创建一个新函数 f,并返回一些描述性函数名()。但这不是重点。
解决方案
您将在某处存储字符串
$f = "somedescriptivefunctionName";
然后通过在大括号中指定其名称来调用该函数:
$this->{$f}('Yahoo!!');
编辑
根据评论部分,目的是用相同的名称调用另一个类的实例的方法。您可以扩展配置类以实现某种类似的行为,但我认为在这种情况下作为解决方案是不可接受的。您可以将您的类转换为装饰器,例如
class SomeClassDecorator
{
protected $_instance;
public function myMethod() {
return strtoupper( $this->_instance->someMethod() );
}
public function __construct(SomeClass $instance) {
$this->_instance = $instance;
}
public function __call($method, $args) {
return call_user_func_array(array($this->_instance, $method), $args);
}
public function __get($key) {
return $this->_instance->$key;
}
public function __set($key, $val) {
return $this->_instance->$key = $val;
}
// can implement additional (magic) methods here ...
}
上面的代码是从 Gordon 的惊人答案复制而来的:如何在 PHP 中向现有类添加方法?
这个想法的演变可能是为您的配置类创建一个装饰器作为基类,并为您配置的类扩展该基类,因此您将实现单个装饰器并(重新)使用它。
推荐阅读
- appium-android - 发送密钥时出现此错误无效的元素状态错误
- php - 如何在不模糊图像的情况下在 gd 中创建透明背景?
- jquery - 动画 CSS 上的 styled-components v4 语法
- javafx - Java FX 接口延迟加载
- html - 如何在折叠和展开时更改 Bootstrap 3 列表图标
- sql-server - SQL Server 动态数据透视表 - 列名重复
- java - LDAP + Spring:如何正确认证?
- python - 如何基于 pandas 多维数据框计算新变量?
- java - 如何从希伯来日历中的总天数差异计算月份
- powerbi - PowerBI 中的时间切片器