使用类作为数组元素

时间:2014-05-28 17:13:29

标签: php arrays class instantiation

我有一个包含字符串的多个文件。我使用文本分隔符将字符串分成行。我使用另一个文本分隔符将每一行分成字段

我正在使用多个类来执行此操作。我有一个类(行类),我需要多次实例化,所以我想要一个这个类的数组。当我收到一条消息说我不能将该对象用作数组时,我遇到了麻烦。你能提供什么建议吗?这是错误消息和我的代码

  

致命错误:无法使用类型为lineController的对象作为数组 - 在第20行

<?php
require_once('/super_src/controller/fileController.php');
require_once('/super_src/controller/lineController.php');
require_once('/super_src/controller/elementController.php');
require_once('/super_src/controller/exceptionController.php');

class masterControl{
public $fc;//fileControl variable
public $lc = array();//lineControl variable
public $ec;//elementControl variable
public $xc;//exceptionControl variable

public function __construct(){
    $this->fc = new fileController($this->path);
}

public function setLC($lc){$this->lc = $lc;}//end setLC()

//I get the error on this line where I have lc[$index]
public function setLCAtIndex($value, $index){$this->lc[$index] = $value;}//end setLCAtIndex()
public function getLC(){if($this->lc == null) return "";else return $this->lc;}//end getLC()
public function getLCAtIndex($index){if($this->lc == null && $this->lc != 0) return "";else return $this->lc[$index];}//end getLCAtIndex()


public function ediTeardown(){
    $this->fc->searchFiles($this->fc->getPath());//the files
//      var_dump($this->fc->getFile());
    $index = 0;
    foreach($this->fc->getFile() as $file){
        $this->lc = new lineController();
        $this->lc->extractLines($file);
        $this->setLCAtIndex($file, $index);
        $index++;
    }//end foreach()
}//end ediTeardown()

public function echoArray($array){foreach ($array as $a){echo $a."-";echo"<br>";};}
public function __toString(){}
}

$mc = new masterControl();
$mc->ediTeardown();
//var_dump($mc->getLC());
echo "<br><br><br><br><br><br>End Of Line!"
?>

1 个答案:

答案 0 :(得分:3)

你的代码第30行

$this->lc = new lineController();

将您的“$ this-&gt; lc”变量从数组更改为对象。

如果你想创建一个lineController数组,你应该将该行改为:

$tmp_lc = new lineController();
$tmp_lc->extractLines($file);
$this->lc[] = $tmp_lc;

修改

对于更清洁的解决方案,您的代码应如下所示:

$num_lc = 0;
foreach($this->fc->getFile() as $file){
    $this->lc[$num_lc] = new lineController();
    $this->lc[$num_lc]->extractLines($file);
    $this->setLCAtIndex($file, $index);
    $index++;
    $num_lc++;
}//end foreach()

使用此代码,您不需要设置具有大型结构的临时变量,您可以使用计数器作为数组位置,并直接写入数组。