Теперь возьмите это с крошкой соли, потому что это из памяти, и я не могу найти свои исходные источники, но если я правильно помню, память распределяется по классам.
Как только у вас есть класспосле загрузки все методы будут загружены в память, даже если они еще не выполняются.Затем, если у вас есть новые экземпляры этого класса, PHP будет ссылаться на исходный класс для методов.Тем не менее, он выделит свою собственную память для членов.Обратите внимание, что между классом и экземпляром есть различие.
//this is a class (obviously)
class foo {
__construct(){
print "constructing foo\n";
}
public function bar(){
print "called bar\n";
}
}
//this is the first instantiation of that class,
//the class already has methods loaded in memory, ready to run.
//bar is never called, but it's still in memory, just waiting.
$my_foo = new foo();
//this is the second instance, everything is already loaded,
//if you call bar, there's no need to reallocate anything.
$your_foo = new foo();
$your_foo->bar();
Выше будет загружен класс foo, который, в свою очередь, загружает методы construct и bar (а также другие встроенные).Затем, когда вы создаете его экземпляр, ему не нужно выделять место для методов, он просто ссылается на уже загруженные методы.Так что в моем примере метод bar()
уже загружен и ожидает, нет необходимости перераспределять пространство.
Конечно, это становится немного сложнее, когда речь идет о частных методах / членах, а также ссылках на экземпляры.,Достаточно сказать, что если вы так сильно переживаете, то, возможно, PHP не будет тем языком, который вы будете использовать.
Не уверен, есть ли способ копаться в коде PHP, чтобы посмотреть, какая память выделена так, как вылегко быть в состоянии с C, например.Возможно, вам придется перейти на этот низкий уровень, чтобы ответить на вопрос в вашем конкретном случае.