PHP has a single inheritance, restricted access, overloadable object model. In addition, PHP supports restrictions on properties and methods You can declare members as private, disallowing access from outside classes. Finally, PHP allows a subclass to overload members from its parent class.
PHP’s object model treats objects as the same as any otherData type is different, passed by reference. PHP does not require you to explicitly pass and return objects by reference. The reference-based object model will be elaborated at the end of this chapter. It is the most advanced in PHP5 Important new features.
With a more direct object model, there are additional advantages: increased efficiency, less memory usage, and greater flexibility.
In PHP In previous versions, the script copied the object by default. Now PHP only moves the handle, which takes less time. The improvement in script execution efficiency is due to the avoidance of unnecessary copying. While the object system brings complexity, it also brings Gains in execution efficiency. At the same time, reducing copying means occupying less memory and leaving more memory for other operations, which also improves efficiency.
Zand Engine 2 has greater flexibility . A happy development is to allow destruction - executing a class method before the object is destroyed. This is also good for memory utilization, allowing PHP to clearly know when there are no references to the object and allocate the vacated memory to Other uses.
Supplement:
Memory management of PHP5
Object transfer
PHP5 uses Zend engine II, and objects are stored in independent structures
Object Store, instead of being stored in Zval like other general variables (in PHP4, objects are stored in Zval like general variables). Only the pointer of the object is stored in Zval rather than the content (value). When we copy an object or pass an object as a parameter to a function, we do not need to copy the data. Just keep the same object pointer and let another zval notify the Object Store that this particular object now points to. Since the object itself is located in the Object Store, any changes we make to it will affect all zval structures holding pointers to the object - manifested in the program as any changes to the target object will affect the source object. .This makes it look like PHP objects are always passed by reference, so objects in PHP are passed by "reference" by default, and you no longer need to use & to declare it like in PHP4.
Garbage collection mechanism
Some languages, most typically C, require you to explicitly request memory allocation when you create a data structure. Once you allocate memory, you can store information in variables. At the same time, you also need to release the memory when you are done using the variable, so that the machine can free up memory for other variables and avoid running out of memory.
PHP can automatically manage memory and clear objects that are no longer needed. PHP uses reference counting, a simple garbage collection mechanism. Each object contains a reference counter, and each reference connected to the object increases the counter by one. When reference leaves the living space or is set to NULL, the counter is decremented by 1. When an object's reference counter reaches zero, PHP knows that you no longer need to use this object and releases the memory space it occupies.
The code is as follows:
<?php class Person{ } function sendEmailTo(){ } $haohappy = new Person( ); // 建立一个新对象: 引用计数 Reference count = 1 $haohappy2 = $haohappy; // 通过引用复制: Reference count = 2 unset($haohappy); // 删除一个引用: Reference count = 1 sendEmailTo($haohappy2); // 通过引用传递对象: // 在函数执行期间: // Reference count = 2 // 执行结束后: // Reference count = 1 unset($haohappy2); // 删除引用: Reference count = 0 自动释放内存空间 ?>
The above is the detailed content of How does php refer to the object model? Detailed explanation of specific cited examples. For more information, please follow other related articles on the PHP Chinese website!