初始化一个对象数组

时间:2012-07-17 19:37:39

标签: php arrays wamp

测试rand函数的程序就是一个例子:

<?php 
        class number {
           function number() {
               $occurences=0;
           }
           public $occurences;
           public $value;
        }
        $draws = 5000;
        $numOfInts = 10;
        //$integers = array();
        $integers [] = new number(); 
        //initialising loop
        for($i=0;$i<=$numOfInts;$i++)
            $integers[$i]->$value = $i;  //debugger points here

        for($i=0;$i<$draws;$i++) {
            $integers[rand(0,numOfInts)]->$occurences++;               
        }
        foreach($integers as $int)
            printf("%5d %5d  <br/>",$int->$value,$int->$occurences);       
 ?>

WAMP服务器上的错误:

  

未定义的变量:第31行的C:\ path \ index.php中的值

     

致命错误:无法访问第31行的C:\ path \ index.php中的空属性

是什么原因导致他们以及如何解决?我认为$整数声明不正确。

2 个答案:

答案 0 :(得分:3)

为什么?

//$integers = array();
$integers [] = new number(); 

应该只是

$integers = array();
for($i=0;$i<=$numOfInts;$i++) {
    $integers[$i] = new number();
}

PHP中没有类型化数组

答案 1 :(得分:3)

您应该使用以下语法访问对象的成员:

$integers[$i]->value
$integers[$i]->occurences;

但是,您必须首先初始化数组,这意味着取消注释初始行

$integers = array();

事实上,您没有使用更好的OOP样式,这会改变您的数据结构:

class Number {
    private $value;
    private $occurences = 0;
    public function __construct($value = 0) {
        $this->value = $value;
    }
    public function getValue() {
        return $this->number;
    }
    public function addOccurence() {
        $this->occurences++;
    }
    public function getOccurences() {
        return $this->occurences;
    }
}

然后您将访问这样的成员:

// init part
$integers = array();
for($i = 0; $i < $numOfInts; $i++) {
    $integers[] = new Number($i);
}

// draws part
for($i=0; $i < $draws; $i++) {
    $integers[rand(0,$numOfInts-1)]->addOccurence();               
}

// print part
foreach($integers as $number) {
    printf("%5d %5d<br />", $number->getValue(), $number->getOccurences());
}