Мне интересно, если я создаю класс многих методов (как PHP по-прежнему их называют), которые многие из них не используются, и я создаю объект, он создает память для всех методов, даже если большинство методов не являются используемый? Я занимаюсь программированием PHP OOP.Когда я создаю объект класса, он выполняет ВСЕ методы внутри класса или просто вызванные методы?
ответ
Теперь, возьмите это с солью, потому что это из памяти, и я не могу найти свои исходные источники, но если я правильно помню, память выделяется классом.
Как только у вас есть класс, который загружен, он будет иметь все методы, загруженные в память, даже если они еще не выполнены. Затем, если у вас есть новые экземпляры этого класса, 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, который в свою очередь, загружает конструкта и штриховые методы (а также другие, которые встроены в). Затем, когда вы создаете экземпляр, ему не нужно выделять пространство для методов, он просто ссылается на уже загруженные методы. Поэтому в моем примере метод bar()
уже загружен и ждет, нет необходимости перераспределять пространство.
Конечно, это становится немного сложным, когда речь идет о частных методах/членах, а также ссылки на экземпляры. Достаточно сказать, что если вы так сильно волнуетесь, то PHP не может быть языком, который будет использоваться.
Не уверен, есть ли способ копаться в PHP-коде, чтобы узнать, какая память распределена, как вы могли бы легко использовать с C, например. Вам, вероятно, придется пойти на этот низкий уровень, чтобы ответить на вопрос в вашем конкретном случае.
В общем, создание нового экземпляра класса не копирует методы - все экземпляры класса совместно используют одну копию каждого метода, независимо от того, используется она или нет. Однако, в зависимости от языка, имена методов сопоставления таблицы с фактическим (совместно используемым) методом могут или не могут быть разделены, но я не уверен, что здесь делает PHP.
- 1. Когда использовать статические методы и методы класса
- 2. C# Различные методы класса, вызванные из общего объекта/класса?
- 3. Украшать все методы класса
- 4. Python - методы вызова внутри класса, изнутри класса
- 5. Когда объявлять методы расширения класса
- 6. Ссылка на методы класса внутри переменных класса
- 7. Вывести методы вложенного класса
- 8. Как вызвать методы внутри класса?
- 9. Реагировать методы класса переопределение
- 10. Изменение класса RetailLoyaltyCollection Методы класса
- 11. Методы переопределения класса или класс
- 12. Методы фабрики класса UICololor - когда они выпущены
- 13. Свойства или методы определения класса?
- 14. Определение и методы класса
- 15. Как перечислить все методы класса (не расширенные и вложенные методы)
- 16. Методы тестирования, вызванные другим методом
- 17. Автоматически делегируя все методы класса Java
- 18. Методы строительства класса
- 19. Методы определения класса DAO
- 20. Как использовать методы класса для частного члена Объект другого класса
- 21. Методы класса Python, когда возвращать себя?
- 22. Методы класса сканера
- 23. МЕТОДЫ КЛАССА Java
- 24. Методы класса Python
- 25. Легкий способ перегрузки Все методы класса
- 26. Методы класса Strongloop (loopback)
- 27. получить все методы класса-объекта-объекта-объекта?
- 28. Методы вызова внутри класса для изменения списка
- 29. Методы форматирования класса С ++
- 30. Методы класса Javascript вне класса?
Ваши условия отключены. «В общем, создание нового экземпляра класса не копирует членов - все экземпляры одного класса имеют одну копию каждого члена» должно быть «В общем, создание нового экземпляра класса не копирует МЕТОДЫ - все экземпляры класса совместно используют одну копию каждого МЕТОДА " член термина может ссылаться на частные члены данных (то есть частные переменные) –
Действительно, исправлено .. – bdonlan