我有一个类,我想动态调用所有以默认名称开头的函数:
class social_button
{
public function __construct()
{
[...]
}
private function social_facebook()
{[...]}
private function social_instagramm();
{[...]}
private function social_twitter();
{[...]}
[and so on]
}
我的问题是,我不会写所有的时间:
$this->social_facebook();
$this->social_twitter();
...
因为它可能/将成为无穷无尽的名单。
所以这是我的问题:
有没有办法将所有功能称为通用/动态,以" social"?开头
喜欢:$this->social_*()
;
(" *"类似占位符,包含无限数量的字符)
抱歉我的英语不好,非常感谢所有答案。
祝你好运
答案 0 :(得分:4)
您可以使用字符串连接构建方法名称:
$service = 'facebook';
$this->{'social_' . $service}();
或
$service = 'social_facebook';
$this->$service();
如果你想打电话给所有人,请选择:
$services = ['facebook', 'twitter'];
foreach ($services as $service) {
$this->{'social_' . $service}();
}
答案 1 :(得分:1)
修改:请参阅下面的the answer by localheinz了解更好的方法,使用反射。 get_class_methods()
只返回公开方法。
建立 hsz 的答案:
您可以获取课程列表'使用get_class_methods()
的方法。然后你可以遍历结果,如果它以" social _"开头,则调用该方法。
// Get the list of methods
$class_methods = get_class_methods("social_button");
// Loop through the list of method names
foreach ($class_methods as $method_name)
{
// Are the first 7 characters "social_"?
if (substr($method_name, 0, 7) == "social_")
{
// Call the method
$this->{$method_name}();
}
}