PHP OOP致命错误:允许的内存大小为268435456字节

时间:2016-12-13 16:12:24

标签: php oop

我想知道为什么我的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>

1 个答案:

答案 0 :(得分:2)

问题在于方法

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

当你打电话给这个方法时,它会一直呼唤自己 - 并且没有阻止它。实际上,这会导致无限循环,这种循环运行的时间太长,以至于耗尽了所有的记忆。它与运行while (true);有点相同。

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

或许您正在寻找的是

return $this->opslag = $geefOpslag;