2016-02-07 2 views
1

Я медленно читаю исходный код PHP 7, написанный на C. Но мне действительно интересно узнать, что такое «instancing a class». В PHP это происходит, записывая $myclassvar = new myclass().Мгновенное действие: что должно произойти на низком уровне

Что должен делать этот код в C? Какой тип var $myclass? Почему мы должны instantiate класс? Должно ли это означать вызов конструктора __construct()? Не могли бы вы объяснить мне, что должен означать этот код (подробный). Спасибо

+0

правильный термин в создании экземпляра, так как в экземпляре объекта, в соответствии с моим редактирования. – Devon

ответ

2

C не имеет классов, но самая близкая вещь в C - это malloc структуры на куче. Код PHP $myclassvar = new myclass() наиболее похож на

typedef struct { 
    int x, y; 
} pt; 

pt *p = malloc(sizeof(pt)); 
+0

Да. Я думал о структуре как о реальном типе $ myclass. Итак, компилятор PHP должен выделять пространство с помощью malloc(), а затем вызвать конструкцию? –

+0

Да, компилятор PHP вызывает 'malloc' во время конструктора и' free' в деструкторе. – stackptr

+0

Должен ли PHP вызывать malloc только на vars/functions, которые вызывают в __construct() и использовать realloc after или malloc весь класс? –