【问题标题】:How to create instances with strings in php如何在 php 中使用字符串创建实例
【发布时间】:2014-04-07 11:15:59
【问题描述】:

我有一个班级叫做“分析员”,他有很多“分析员”。分析器在给定的输入中寻找某些模式。

现在,我在分析器的构造函数中创建“分析器”的实例,如下所示:

<?php

class analyser {

protected $analysers = array();

public function __construct() {
    $analyser1 = new Analyser1();
    $this->analysers[] = $analyser1;
    $analyser2 = new Analyser1();
    $this->analysers[] = $analyser2;
    ...
}

这适用于有限数量的分析器,但我想创建一个数组('analyzer1','analyzer2',...),它将在循环中用于创建所有需要的实例。这是可能的还是我需要手动创建每个实例?

public function __construct() {
    foreach ($names as $analyser){
    $instance = new $analyser();
    $this->analysers[] = $instance;
}

我该怎么做?

【问题讨论】:

  • 是的,我试过了,它给了我关于不存在类的错误
  • 嗯,听起来下一步应该是检查错误消息并找出它认为类不存在的原因。

标签: php class variables instance


【解决方案1】:

这应该很简单——此外,您可以使用嵌套关联数组数据为每个对象添加一些初始属性,例如,您可能希望为每个对象指定一个名称属性:

<?php

class Analyser1
{
    protected $name;

    public function setName($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }
}

$analyserData = [
  ['name' => 'analyser1'],
  ['name' => 'analyser2'],
  ['name' => 'analyser3'],
];

$analysers = [];

foreach ($analyserData as $data) {
  $obj = new Analyser1();
  $name = $data['name'];
  $obj->setName($name);
  $analysers[$name] = $obj;
  echo 'created ' . $obj->getName() . PHP_EOL;
}

print_r($analysers);

产量:

created analyser1
created analyser2
created analyser3
Array
(
    [analyser1] => Analyser1 Object
        (
            [name:protected] => analyser1
        )

    [analyser2] => Analyser1 Object
        (
            [name:protected] => analyser2
        )

    [analyser3] => Analyser1 Object
        (
            [name:protected] => analyser3
        )

)

此处示例:https://eval.in/133225

希望这会有所帮助! :)

【讨论】:

    【解决方案2】:

    你可以使用这个简单的代码:

    public function __construct() {
        for ($i=1; $i<=10; $i++){
            // if you want associative array, you should use this part
            $key = 'analyser' . $i;
            $this->analysers[$key] = new Analyser1();
        }
    }
    

    它会在数组 $this->analysers 中创建 10 个类 Analyser1 的实例

    【讨论】:

      猜你喜欢
      • 2011-06-02
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      相关资源
      最近更新 更多