【问题标题】:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 262144 bytes)?致命错误:允许的内存大小为 134217728 字节已用尽(试图分配 262144 字节)?
【发布时间】:2018-08-01 15:15:59
【问题描述】:

我在 PHP 中使用重载,我的 PHP 代码有什么问题,即使它只有 8 行代码:

class c1{
  public function __call($name,$array){
      if($this->$name()){ return true;}
  }
}

$cl = new c1;
echo $cl->m1();

它说:

致命错误:允许的内存大小为 134217728 字节已用尽(尝试分配 262144 字节)

【问题讨论】:

  • 您尝试调用m1(),调用__call() 并尝试调用m1() 调用__call() 并尝试调用m1() 等... 无限循环。至少没完没了,直到内存耗尽。
  • 你可能想要if(method_exists($this, $name)){ return true;}

标签: php php-7


【解决方案1】:

您正在使用此代码进行无限循环:

if($this->$name()){ return true;}

这一行调用 __call,然后调用 __call,依此类推,因为函数“m1”没有定义。

【讨论】:

  • 所以你的意思是 __call() 方法被连续调用。那么这背后的意义何在?为什么它被连续调用?我认为这是 PHP 的一种奇怪行为。相反,它应该调用一次 __call() 方法并返回预期的结果。为什么会一次又一次地调用它?
  • 它永远不会到达return 声明。 @StressDBrain
  • 你的意思是 _call() 是为那些不存在或不可访问的方法调用的,这就是为什么 if ($this->$name()){ return true;} 语句本身调用 _call() 方法,结果变成无限循环。我的故事正确吗? @Tiois
  • @StressdBrain:是的,完全正确。您正在专门调用 if 中的未定义函数,而该函数又再次调用 _call()
猜你喜欢
  • 1970-01-01
  • 2020-04-10
  • 2021-04-03
  • 2011-09-27
  • 2015-03-08
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 2011-02-23
相关资源
最近更新 更多