测试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中的空属性
是什么原因导致他们以及如何解决?我认为$整数声明不正确。
答案 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());
}