我正在做某种自己的模板系统。我想改变
<title>{site('title')}</title>
使用参数“title”进入函数“site”执行。这里的
private function replaceFunc($subject)
{
foreach($this->func as $t)
{
$args = explode(", ", preg_replace('/\{'.$t.'\(\'([a-zA-Z,]+)\'\)\}/', '$1', $subject));
$subject = preg_replace('/\{'.$t.'\([a-zA-Z,\']+\)\}/', call_user_func_array($t, $args), $subject);
}
return $subject;
}
这是网站:
function site($what)
{
global $db;
$s = $db->askSingle("SELECT * FROM ".DB_PREFIX."config");
switch($what)
{
case 'title':
return 'Title of page';
break;
case 'version':
return $s->version;
break;
case 'themeDir':
return 'lolmao';
break;
default:
return false;
}
}
我试图将$what
(本案例中为“title”)与“title”进行比较。 MD5不同。 strcmp
给-1,“==”,“===”返回false。怎么了? ($what
类型为字符串。您无法将call_user_func_array
更改为call_user_func
,因为稍后我将使用多个参数)
编辑:
Strlen $ what - strlen title 403 - 5 嘿 - 看起来我没有剪掉其余部分;)
的var_dump
string(403)“ 标题“
答案 0 :(得分:2)
MD5不同。 Strcmp给-1, “==”和“===”返回false。
投入var_dump()
和strlen()
这个功能适用于特别困难的情况:
function dump(&$str) {
$i=0;
while (isset($str[$i])) echo strtoupper(dechex(ord($str[$i++])));
}
答案 1 :(得分:2)
你试过修剪空白吗?
$what = trim($what)
也许有一个尾随/开始的空白字符。还要确保它们都是平等的:
$what = strtolower(trim($what)) //trim and lower
答案 2 :(得分:2)
你确定没有空格吗?使用trim()
摆脱它们。如果md5s不同,则字符串不同。 var_dump(str_split($what))
将通过char输出字符串char,如果空格不是你的问题,这可能会有所帮助。
答案 3 :(得分:1)
我试图将$ what(对于本案例“title”)与“title”进行比较。 MD5不同。
这表明$what
不是“标题”。你应该在那里输入一些调试语句:
function site($what) {
var_dump($what);
die();
}
检查没有你没想到的额外空格或字符。