我有 2 个相互关联的 PHP 类,而不是使用
__construct
,我尝试使用扩展来组合这两个类。但是为什么不能从父类调用子类方法呢?没有显示结果或错误,但警告达到内存限制。
这里是我的示例代码:
<?php
class Me
{
public $you;
public function __construct()
{
$this->you = new You;
}
public function Hi()
{
return 'Hi You';
}
public function WhatYouSaid()
{
return $this->you->Me();
}
}
class You extends Me
{
public function Me()
{
return 'Yes Me';
}
}
$talk = new You;
print_r($talk->WhatYouSaid());
我收到错误:
致命错误:已耗尽 xxx 字节的允许内存大小(已尝试分配 xx 字节)
每次创建新对象或类型
You
,都会调用Me
中的构造函数。然后创建一个You
类型的新对象,这调用Me
...中的构造函数
所以你很快就会用完内存,因为它正在创建大量新对象。
还有一种方法名称不同的情况,我假设您打算为 2 个输出方法使用相同的名称。您通常不会在子类中引入新方法。
所以这段代码只是调用当前对象的方法而不是创建一个新对象来使用...
class Me {
public function Hi()
{
return 'Hi You';
}
public function WhatYouSaid()
{
return $this->Hi();
}
}
class You extends Me{
public function Hi()
{
return 'Yes Me';
}
}
$talk = new You;
print_r($talk->WhatYouSaid());
实际上问题在于,每次您尝试创建一个 Me 对象时,它都会实例化一个 You 对象(正如您在 Me 的构造函数中设置的那样)。
由于You扩展了Me,当您实例化一个You对象时,它首先执行Me的构造函数中的代码,因此您进入了一个不间断的循环。然后你的内存用完了。