1

测试 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 中的空属性

是什么导致了它们以及如何解决?我想 $integers 声明不正确。

4

2 回答 2

3

为什么?

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

应该只是

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

PHP 中没有类型化数组

于 2012-07-17T19:39:22.807 回答
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());
}
于 2012-07-17T19:41:44.047 回答