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

PHP OOP Fatal error: Allowed memory size of 268435456 bytes exhausted

我想知道为什么我的PHP有致命的错误。

它说:

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

在Werknemer子类的最后echo 'geefOpslag'

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<head>
    <meta charset="UTF-8">
    Persoon
</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>

你的问题在于方法

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

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

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

也许你正在寻找的是这个

1
return $this->opslag = $geefOpslag;