2016-12-13 8 views
1

PHPに致命的なエラーがあるのはなぜかと思います。PHP OOP致命的なエラー:268435456バイトのメモリサイズを使い果たしました

それは言う:サブクラスWerknemerの最後のecho 'geefOpslag'

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

を。

しかし、私はなぜそれがわかりません。私は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

関連する問題