2016-12-13 72 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

相關問題