我如何制作一个类型" class"用PHP?

时间:2014-10-22 09:37:58

标签: php arrays object

我有以下几个属性和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]等等。我希望我的问题不复杂且不合逻辑。

非常感谢提前

3 个答案:

答案 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)

我认为你应该有两个班级:

  • 第一个,Fetcher(或你喜欢的名字),你的功能。
  • 第二个,会员,名称和家庭属性。

成员的工作不是取得你的文字,这就是为什么我要再上一堂课。

在你的功能中,完成你的工作,并在循环中,这样做:

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是关键词:

  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);
    
  3. 这更像你想要的吗?

    希望它有所帮助!
    继续编码!
    顷。