我想知道为什么我的PHP有致命错误。
它说:
致命错误:允许的内存大小为268435456字节耗尽(试图分配130968字节)'
在Werknemer子类的最后echo 'geefOpslag'
。
但我不知道为什么。我的php.ini文件中有128 MB的内存。
<head>
<meta charset="UTF-8">
<title>Persoon</title>
</head>
<body>
<?php
class Persoon
{
public $naam;
public $adres;
public $email;
public function __construct()
{
$this->naam = 'naam';
$this->adres = 'adres';
$this->email = 'email';
}
public function getNaw()
{
return $this->naam . $this->adres . $this->email;
}
public function setNaam($naam)
{
$this->naam = $naam;
}
public function setAdres($adres)
{
$this->adres = $adres;
}
public function setEmail($email)
{
$this->email = $email;
}
}
$persoon = new Persoon();
$persoon->setNaam("Harm ");
$persoon->setAdres("Parkstraat 1 ");
$persoon->setEmail("Harm@gmail.com");
echo $persoon->getNaw();
class Werknemer extends Persoon
{
public $datumInDienst;
public $datumUitDienst;
public $Salaris;
public $opslag;
function __construct()
{
parent::__construct();
$this->datumInDienst = 'datumInDienst';
$this->datumUitDienst = 'datumUitDienst';
$this->Salaris = 'Salaris';
$this->geefOpslag = 'geefOpslag';
}
public function setDatumInDienst($datumInDienst)
{
//return $this->datumInDienst;
return $this->datumInDienst = $datumInDienst;
}
public function setDatumUitDienst($datumUitDienst)
{
//return $this->datumUitDienst;
return $this->datumUitDienst = $datumUitDienst;
}
public function setSalaris($Salaris)
{
return $this->Salaris = $Salaris;
}
public function geefOpslag($geefOpslag)
{
return $this->geefOpslag($geefOpslag);
}
}
$werknemer = new Werknemer();
echo '<br/><br/>Datum in dienst: ', $werknemer->setDatumInDienst('13/12/2015');
echo '<br/><br/>Datum uit dienst: ', $werknemer->setDatumUitDienst('13/12/2016');
echo '<br/><br/>Salaris: ', $werknemer->setSalaris(1500);
echo '<br/><br/>Opslag: ', $werknemer->geefOpslag(200);
?>
</body>
答案 0 :(得分:2)
问题在于方法
public function geefOpslag($geefOpslag) {
return $this->geefOpslag($geefOpslag);
}
当你打电话给这个方法时,它会一直呼唤自己 - 并且没有阻止它。实际上,这会导致无限循环,这种循环运行的时间太长,以至于耗尽了所有的记忆。它与运行while (true);
有点相同。
你的解决方案是让它返回一些东西,而不是再次调用它自己的方法 - 你应该返回opfslag
变量是合乎逻辑的,这样做的回报就是这样(当然你也可以在这里做其他事情,但是调用它就像现在一样会导致无限循环,因为没有逻辑可以阻止它)
或许您正在寻找的是
return $this->opslag = $geefOpslag;