如何制作一个类型为“”的数组;类“;在PHP中


How can I make an array of type "class" in PHP?

我有下面的类,它在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是这里的关键词:

  1. 初始化对象var:$member = new Memeber(); $memebr->fechNames();

  2. 在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);
    

这正是你想要的吗?

希望它能有所帮助
继续编码
阿瑞斯。