我正在尝试创建一个链接函数来处理从 XML 文件返回的字符串。
1 个原始字符串可能有多个替换,其中一些来自 XML 文件。
这是丑陋和标准包装的方法:
str_replace("what","is meant", str_replace("name","randomer",str_replace("blah", "hello", $string1)));
这是我试图复制的方法(如 Java):
$string1.replace("blah","hello").replace("name","randomer").replace("what","is meant");
有了上面,它很容易工作......直到我使用 XML 函数来获取替换字符串。
这是我的课:
class resources{
private static $instance, $string;
public static function getString($stringName){
# Create new instance
self::$instance = new self;
# Grabs stringName from an XML file
self::$string = $stringName;
# Return instance
var_dump(self::$instance);
return self::$instance;
}
public static function replace($replace_this, $with_this){
# Replace and return instance
self::$string = str_replace($replace_this, $with_this, self::$string);
return self::$instance;
}
public static function show(){
# Return String
return self::$string;
}
}
echo resources::getString("alpha") // alpha
->replace("lpha","bravo") // abravo
->replace("vo", resources::getString("charlie")->show()) // should be abracharlie
->show(); // charlie
我希望它了解为什么它没有按我认为的那样工作以及它应该如何实际工作。似乎当我再次调用该类时(尽管 var_dump 说它是一个单独的实例),它用“charlie”替换了原始文本,所以我不能只替换第一位的一部分。
谢谢,多米尼克
编辑:是的!我已经想通了(使用静力学),但似乎下面的 Ryano 有一个更好的解决方案
<?php
class resources{
private static $instance, $string, $originalString;
public static function getInstance($stringName){
self::$instance = new self();
self::$originalString = $stringName;
return self::$instance;
}
public static function getString($stringName){
# Grabs stringName from an XML file
self::$string = $stringName;
return self::$instance;
}
function replace($replace_this, $with_this){
self::$originalString = str_replace($replace_this, $with_this, self::$originalString);
self::$string = self::$originalString;
return self::$instance;
}
function show(){
return self::$string;
}
}
echo resources::getInstance("alpha") // alpha
->replace("lpha","bravo") // abravo
->replace("vo", resources::getString("charlie")->show()) // should be abracharlie
->replace("lie", resources::getString("vo")->show()) // abracharvo
->show(); // abracharvo
echo "<br />";
echo resources::getInstance("randomer") // randomer
->replace("er","") // random
->replace("ran", resources::getString("")->show()) // dom
->replace("dom", resources::getString("Dom")->show()) // Dom
->show(); // Dom
echo "<br />";
echo resources::getInstance("nomster") // nomster
->replace("nom","nmo") // nmoster
->replace("nom", resources::getString("mon")->show()) // nmoster
->replace("nmo", resources::getString("mon")->show()) // monster
->show(); // monster
?>