我有两个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());
https://onlinephp.io/c/3d84d
我收到错误:
致命错误:已耗尽允许的xxx字节内存大小(尝试分配xx字节)
根据@奈杰尔Ren的回答,我找到了另一个例子:
<?php
class DataValidate {
public $data;
public function __construct() {
$this->data = new Data;
}
public function inputValidate($newData)
{
// verifying
if ($this->data->get_data($newData['Identifier'], 'nameId'))
{
return false; // alredy exists
}
return $newData;
}
}
class Data {
public $db;
public $validate;
public function __construct() {
$this->db = new Database;
$this->validate = new DataValidate;
}
public function get_data($identifier, $col)
{
return $this->db->select($identifier, $col='*');
}
public function inputValidate($newData)
{
return $this->validate->inputValidate($newData);
}
}
$data = new Data;
print_r($data->inputValidate($some_id));
2条答案
按热度按时间7kqas0il1#
每当你创建一个新的对象或类型
You
时,这将调用Me
中的构造函数,然后创建一个类型为You
的新对象,这将调用Me
中的构造函数...因此,当它创建大量新对象时,您很快就会耗尽内存。
还有一种情况是使用不同的方法名,我假设你的意思是两个输出方法使用相同的名称,你通常不会在子类中引入一个新的方法。
所以这段代码只是调用当前对象上的方法,而不是创建一个新对象来使用...
编辑:如果你只是想从另一个类调用一个方法,那么使用
extend
对你一点帮助都没有,它只需要是一个类,有一个public
方法可以让你调用。然后创建
Me
而不是You
的示例,并调用...ccrfmcuu2#
实际上问题在于,每次你试图创建一个Me对象时,它都会示例化一个You对象(正如你在Me的构造函数中所设置的)。
当YouextendMe时,当你示例化一个You对象时,它从执行Me构造函数中的代码开始,所以你进入了一个不停的循环,然后你耗尽了内存。