沒有爲預定的選項,但在這裏你可以做一些Monkey Patching。
您可以修改源代碼方法,但這不是一個好主意,因爲如果將庫更新爲新版本,則會丟失更改。
取而代之,你可以創建一個新的類來擴展原來的類,並在那裏添加一個調用原始的方法setValue
但是它複製了參數以傳遞它們都是小寫字母和大寫。
這是我的方法。我無法嘗試,但我認爲它會起作用(當然,您可以爲班級和方法選擇一些更好的名稱)。
class TemplateProcessorCaseInsensitive extends TemplateProcessor
{
public function setValueCaseInsensitive($search, $replace, $limit = self::MAXIMUM_REPLACEMENTS_DEFAULT)
{
if (is_array($search)) {
foreach ($search as &$item) {
$item = strtolower($item);
}
$capitalizedSearch = $search;
foreach ($capitalizedSearch as &$capitalizedItem){
$capitalizedItem = ucfirst($capitalizedItem);
}
$search = array_merge($search, $capitalizedSearch);
}
else{
$search = array(strtolower($search), ucfirst(strtolower($search)));
}
if(is_array($replace)){
$replace = array_merge($replace, $replace);
}
else{
$replace = array($replace, $replace);
}
$this->setValue($search, $replace, $limit);
}
}
讓我們看看一些例子!
例1
如果你這樣做:
$templateProcessor = new TemplateProcessorCaseInsensitive ('Template.docx');
$templateProcessor->setValueCaseInsensitive('Name', 'John Doe');
其實你是在後臺做這個:
$templateProcessor = new TemplateProcessor('Template.docx');
$templateProcessor->setValue(array('name', 'Name'), array('John Doe', 'John Doe'));
例2
如果你這樣做:
$templateProcessor = new TemplateProcessorCaseInsensitive ('Template.docx');
$templateProcessor->setValueCaseInsensitive(array('City', 'Street'), array('Detroit', '12th Street'));
其實你是在後臺做這個:
$templateProcessor = new TemplateProcessor('Template.docx');
$templateProcessor->setValue(array('city', 'street', 'City', 'Street'), array('Detroit', '12th Street', 'Detroit', '12th Street'));