考虑以下课程:
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);
我不知道为什么第二次回声会导致调用未定义的函数。
任何人都可以弄清楚吗?
答案 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;
}