我有下面的类,它在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或二维数组而不是类?
我在这里发现了稍微类似的讨论,但使用了二维数组,而不是使用类属性将数据存储在对象中。
我认为我的问题在于定义以下代码行。
$Member = new Member();
$Member->Fetch_name();
我定义的成员不是数组。如果我定义了它的数组,它仍然不起作用。我做了这个
$Member[]= new Member();
但它给出错误
致命错误:在中的非对象上调用成员函数Fetch_name()
如果我给$Member[0]=new Member(),那么我不知道如何在Fetch_Name函数中生成$Member1或Member[2]等等。我希望我的问题不是复杂和不合逻辑的。
提前感谢
Member
对象表示一个成员。你试图让它过载来表示或处理许多成员,这实际上没有意义。最终,您将希望得到一个包含许多Member
实例的数组,而不是相反:
$members = array();
for (...) {
$members[] = new Member($name, $family);
}
很可能您并不真正需要Member
类来做任何事情;提取逻辑应该位于Member
类之外、可能位于Extractor
类或类似的类中。从外面看,你的代码应该是这样的:
$parser = new TextFileParser('my_file.txt');
$members = $parser->extractMembers();
我认为你应该有两个类:
- 第一个,Fetcher(或者你喜欢怎么称呼它),带有你的函数
- 第二个是成员,具有属性"名称"answers"族"
会员的工作不是提取你的文本,这就是为什么我会制作另一个类。
在你的功能中,做好你的工作,在循环中,这样做:
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;
}
这里的问题是您没有正确地将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命名标准编写代码。这不会影响您的功能,但以标准方式编写代码是一种很好的做法。毕竟,有一个标准是有目的的。
这里有一个如何做到这一点的指南。
我会这样写你的代码:
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);
这正是你想要的吗?
希望它能有所帮助
继续编码
阿瑞斯。