调用构造函数参数关闭函数时未定义的函数

时间:2018-08-07 04:07:10

标签: php

考虑以下课程:

class MyClass {

    public function __construct($mailProvider) {
        $this->mailProvider = $mailProvider;

        echo get_class($mailProvider());
        echo get_class($this->mailProvider());
    }

}

然后进行以下通话:

$mailProvider = function () {
    $mail = new PHPMailer(true);
    return $mail;
};

$myClass = new MyClass($mailProvider);

我不知道为什么第二次回声会导致调用未定义的函数。

任何人都可以弄清楚吗?

1 个答案:

答案 0 :(得分:2)

因为PHP将在寻找属性$ this-> mailProvider之前先寻找方法$ this-> mailProvider()。您需要通过将属性包装在括号中来取消引用该属性:

public static String obify(String s){

    String text = s;
    String[] capVowels = {"A", "E", "I", "O", "U"};
    for (String vow : capVowels){
        text = text.replace(vow, "OB" + vow);
    }
    return text;
}