早上好!
我试着描述我的问题:我有一个语言类,在课堂上有一个函数Text(category, item)
。
所以我可以调用函数:
Language::Text("indexPage", "hello_world");
输出结果为:
Hello World!
项目的值位于xml文件中。
我的XML文件的结构:
<?xml version="1.0" encoding="UTF-8"?>
<languageBase>
<language filename="en" language="English">
<category name="indexPage">
<item name="hello_world"><![CDATA[Hello World!]]></item>
</category>
</language>
</languageBase>
但如果我使用函数Text(..)
,我会收到错误:
尝试获取非对象的属性 第20行的C:\ xampp \ htdocs \ Mvc \ system \ classes \ class.language.php
这是我的班级:
<?php
if (!defined("OK")) {
header("Location: ../");
}
class Language {
private static $_language = "de";
public static function params($string) {
$string = str_replace("%USERNAME%", User::GetUsername(User::$_id, 1), $string);
$string = str_replace("%@USERNAME%", User::GetUsername(User::$_id), $string);
return $string;
}
public static function Text($category, $item) {
$xml = new SimpleXMLElement(file_get_contents(self::GetPath()));
$category = "indexPage";
$item = "hello_world";
$obj = $xml->xpath("/languageBase/language/category[@name=\"{$category}\"]/item[@name=\"{$item}\"]");
return $obj->entry;
}
public static function Set($language) {
$_SESSION[SESSION_LANGUAGE] = $language;
}
public static function Get() {
if(isset($_SESSION[SESSION_LANGUAGE])) {
if(file_exists("system/lang/".$_SESSION[SESSION_LANGUAGE].".xml")) {
self::$_language = $_SESSION[SESSION_LANGUAGE];
}
} else {
$_SESSION[SESSION_LANGUAGE] = self::$_language;
}
return self::$_language;
}
public static function GetPath() {
return "system/lang/".self::Get().".xml";
}
}
答案 0 :(得分:1)
您永远不会定义您想要访问名为&#34; name&#34;的属性。可以有任意数量的其他属性,例如&#34; id&#34;。
你能做的就是像这样使用xpath:
public static function Text($category, $item) {
$xml = new SimpleXMLElement(file_get_contents(self::GetPath()));
$items = $xml->xpath("//category[@name='$category']/item[@name='$item']");
if ($items[0]) {
return (string)$items[0];
}
return null;
}
使用此解决方案,确保$ category和$ item永远不包含xpath控制字符非常重要,即$ item =&#39; my [item]&#39;会产生错误。 在这种情况下,你必须以某种方式逃避$ item和$ category。
xpath并不总是很容易理解。一个很好的资源是:http://www.w3schools.com/xpath/xpath_syntax.asp