我有以下几个属性和PHP中的方法(这是简化代码)。
class Member{
public $Name;
public $Family;
public function Fetch_Name(){
for($i=0;$i<10;$i++){
$this[$i]->$Name = I find the name using RegExp and return the value to be stored here;
$this[$i]->Family = I find the family using RegExp and return the value to be stored here;
}
}//function
}//class
在函数Fetch_Name()中,我想使用RegExp查找文本文件中的所有名称和族,并以数组的形式将它们存储为对象的属性。但我不知道如何定义会员阵列。这是逻辑还是我应该定义StdClass或2维数组而不是类?
我发现了稍微类似的讨论here,但使用的是二维数组,而不是使用类属性在对象中存储数据。
我认为我的问题在于定义以下代码行。
$Member = new Member();
$Member->Fetch_name();
我定义的成员不是数组。如果我确定它的数组,它仍然无法正常工作。我这样做了
$Member[]= new Member();
但是它给出了错误
致命错误:在
中的非对象上调用成员函数Fetch_name()
如果我给$ Member [0] = new Member(),那么我就不知道如何在Fetch_Name函数中创建$ Member 1或Member [2]等等。我希望我的问题不复杂且不合逻辑。
非常感谢提前
答案 0 :(得分:3)
Member
对象代表一个成员。你试图超载它来代表或处理许多成员,这些都没有用。最后,您希望最终得到一个包含许多Member
个实例的数组,而不是相反:
$members = array();
for (...) {
$members[] = new Member($name, $family);
}
你很可能真的不需要你的Member
课来做任何事情;提取逻辑应该位于Member
类之外,可能位于Extractor
类或类似的类中。从外部看,您的代码可能看起来像这样:
$parser = new TextFileParser('my_file.txt');
$members = $parser->extractMembers();
答案 1 :(得分:1)
我认为你应该有两个班级:
成员的工作不是取得你的文字,这就是为什么我要再上一堂课。
在你的功能中,完成你的工作,并在循环中,这样做:
for($i = 0; $i < 10; ++$i){
$member = new Member();
$member->setName($name);
$member->setFamily($family);
// The following is an example, do what you want with the generated Member
$this->members[$i] = $member;
}
答案 2 :(得分:1)
这里的问题是你没有正确使用Member类型的对象作为数组。您的代码的正确格式为:
class Member{
public $Name;
public $Family;
public function Fetch_Name(){
for($i=0;$i<10;$i++){
$this->Name[$i] = 'I find the name using RegExp and return the value to be stored here';
$this->Family[$i] = 'I find the family using RegExp and return the value to be stored here';
}
}
}
首先,$this->Name
不是$this->$Name
因为Name已经被声明为成员变量而$this->Name[$i]
是正确的语法,因为$this
引用当前对象,它不能是转换为数组,就像它本身一样。该数组必须包含在成员变量中。
L.E:我可能会补充说您根本不是根据PHP命名标准编写代码。这不会影响您的功能,但最好以标准方式编写代码。毕竟,有一个标准的目的。
Here你有一个如何做到这一点的指南。
我会写这样的代码:
class Member{
public $name;
public $family;
public function fetchName(){
for($i=0;$i<10;$i++){
$this->name[$i] = 'I find the name using RegExp and return the value to be stored here';
$this->family[$i] = 'I find the family using RegExp and return the value to be stored here';
}
}
}
L.E2:看到你上面写的内容,我会修改我的答案:
所以你说你有一个对象,在调用之后必须将值存储到数组中。好吧,after
是关键词:
初始化对象var:
$member = new Memeber();
$memebr->fechNames();
在foreach中初始化和数组
$Member = new Member();
foreach ($Member->Name as $member_name){
$array['names'][] = $member_name;
}
foreach ($Member->Family as $member_family) {
$array['family'][] = $member_family;
}
var_dump($array);
这更像你想要的吗?
希望它有所帮助!
继续编码!
顷。