Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OOP继承内存初始化_Oop_Inheritance - Fatal编程技术网

OOP继承内存初始化

OOP继承内存初始化,oop,inheritance,Oop,Inheritance,当你实例化一个从父类继承的类的对象时,在我所知道的大多数语言中,构造函数调用超类构造函数,我的问题是:当调用超类的构造函数时,内存中实际上会有一个这种类型的对象,但我们正在创建一个具有(在本例中)要添加到对象中的附加值,那么如何在内存中实现?它是添加到原始对象中的吗?原始对象的内容是否复制到一个新对象中,并为所有变量留出空间?还是完全不同 我刚刚遇到的另一个问题是,类变量(如java中的)是否保存在内存中程序的数据段中?如何将类而不是对象存储在内存中 谢谢。类是定义其对象的代码,所以它们在程序的

当你实例化一个从父类继承的类的对象时,在我所知道的大多数语言中,构造函数调用超类构造函数,我的问题是:当调用超类的构造函数时,内存中实际上会有一个这种类型的对象,但我们正在创建一个具有(在本例中)要添加到对象中的附加值,那么如何在内存中实现?它是添加到原始对象中的吗?原始对象的内容是否复制到一个新对象中,并为所有变量留出空间?还是完全不同

我刚刚遇到的另一个问题是,类变量(如java中的)是否保存在内存中程序的数据段中?如何将类而不是对象存储在内存中


谢谢。

类是定义其对象的代码,所以它们在程序的代码段中。所有类变量都在数据段中


当我们创建子类的对象时,首先创建它的父类对象,并为子类成员扩展它。这就是为什么子类对象拥有它的父类的所有成员。

我真的不知道引擎是如何工作的,但我知道如何在PHP中测试内存使用情况。这两个脚本

class base {
    public function __construct() {

    }
}

$start_memory = memory_get_usage();
$object = new base;
echo memory_get_usage() - $start_memory;

返回相同的值。这意味着当类被扩展时,内存中只有一个实例,而不是父实例+它的子实例


phpfiddles:,

为什么您需要知道这一点?无论如何,这取决于引擎和/或编译器,所以您必须检查它的code@vladkras我不需要知道,我只是想知道。如果它是特定于实现的,你能给我一个实现想法的例子吗?很明显,你只是在编写php教程中的基础知识(“类”部分)
class base {
    public function __construct() {

    }
}
class derived extends base {
    public function __construct() {

    }
}

$start_memory = memory_get_usage();
$object = new derived;
echo memory_get_usage() - $start_memory;