2016-12-13 75 views
1

我想知道为什么我的PHP有一个致命错误。PHP OOP致命错误:允许内存大小268435456字节耗尽

它说:

Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 130968 bytes)'

在子类Werknemer最后echo 'geefOpslag'

但我不知道为什么。我在我的128 MB的php.ini文件中有内存。

<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("[email protected]"); 

    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> 

回答

2

你的问题出在方法

public function geefOpslag($geefOpslag) { 
    return $this->geefOpslag($geefOpslag); 
} 

当你调用这个方法,它不断对自身调用 - 并没有阻止它。实际上,这会导致一个无限循环,这个循环会持续很长时间,以至于耗尽了所有的内存。它会和运行while (true);一样。

你的解决方案是让它返回一些东西,而不是再次调用它自己的方法 - 这是合乎逻辑的,你应该返回opfslag变量,使返回像这样,而不是(当然你也可以在这里做其他事情,但调用它喜欢它目前已达导致无限循环,因为没有逻辑来阻止它)

你要找也许什么是这个,而不是

return $this->opslag = $geefOpslag; 
+0

谢谢,这个工作:) – Johan

相关问题