2016-12-13 2 views
1

Интересно, почему мой PHP имеет фатальную ошибку.PHP OOP Неустранимая ошибка: допустимый размер памяти 268435456 байт исчерпан

Он говорит:

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

в в подклассе Werknemer последнего echo 'geefOpslag'.

Но я не знаю почему. У меня есть память в моем файле php.ini размером 128 МБ.

<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

Смежные вопросы