我有很多成员条目,格式像这样的XML文件:如何让工厂类在PHP中创建对象实例?
<staff>
<member>
<name></name>
<image></image>
<title></title>
<email></email>
<phone></phone>
<location></location>
<info></info>
<webTitle></webTitle>
<webURL></webURL>
</member>
</staff>
设置
我创建2 PHP类,DisplayStaff
和Employee
。
Employee
创建一个Employee对象,具有上面XML中概述的私有属性。DisplayStaff
是一个工厂类。它载入上面的XML文件,遍历它,为XML中的每个元素创建一个Employee
实例。它将Employee
对象存储在数组中,$Employees[]
。
在我想输出Employee信息的页面上,我想能够像这样引用它。
$Employees = new DisplayStaff();
$John = Employees['John'];
echo "Hello, my name is $John->name";
代码
<?php
class DisplayStaff
{
private var $staffList;
private var $placeholderImg;
private var $Employees;
public function __construct() {
$staffList = simplexml_load_file("../data/staff.xml");
$placeholderImg = $staffList->placeholderImg;
foreach ($staffList->member as $member) {
$employee = formatEmployeeObj($member);
array_push($Employees, $employee);
}
return $Employees;
}
private function formatEmployeeObj($memberXML) {
$Employee = new Employee();
$Employee->set($name, $memberXML->name);
$Employee->set($image, $memberXML->image);
$Employee->set($title, $memberXML->title);
$Employee->set($email, $memberXML->email);
$Employee->set($phone, $memberXML->phone);
$Employee->set($location, $memberXML->location);
$Employee->set($info, $memberXML->info);
$Employee->set($webTitle, $memberXML->webTitle);
$Employee->set($webURL, $memberXML->webURL);
return $Employee;
}
}
?>
<?php
class Employee
{
private var $name = "";
private var $image = "";
private var $title = "";
private var $email = "";
private var $phone = "";
private var $location = "";
private var $info = "";
private var $webTitle = "";
private var $webURL = "";
public function get($propertyName) {
if(property_exists($this, $propertyName)) {
return $this->$propertyName;
}
else{
return null;
}
}
public function set($propertyName, $propertyValue) {
if(property_exists($this, $propertyName)){
$this->$propertyName = $propertyValue;
}
}
}
?>
问题
我似乎无法得到这个工作。我是新来的类工作。我需要改变什么来让我的课程符合我的期望?
感谢您的高级帮助。
DisplayStaff听起来像它应该有一个不同的名称。另外,它几乎不是工厂,因为它主要解析XML文件并将其内容转换为对象数组。关于你的问题:你有没有得到任何错误?如果没有,请尝试通过代码或转储变量来查看发生了什么? – GolezTrol