Home > Article > Backend Development > PHP core-detailed explanation of classes and object-oriented code
When I first came into contact with PHP, I used a process-oriented approach to make some very simple websites for fun. Writing PHP code was Stacking, scalability and maintainability are so poor that it is extremely inconvenient to change the logic. Later I discovered that PHP supports object-oriented, and suddenly I felt that I was really young and ignorant at that time. After all, PHP is implemented in C, which is not surprising.
Foreword:
From our contact PHPStarting, the first thing we encounter are functions: array operation functions, string operation functions, file operation functions, etc. These functions are the basis for our use of PHP, and they are also the process-oriented programming that PHP has supported since its birth. Process-oriented encapsulates functions one by one and solves problems with a modular idea.
# Supports object-oriented programming starting from PHP4. However, PHP4's object-oriented support is not perfect. Starting from PHP5, PHP has introduced a new object model (Object Model) and added many new features, including access control, abstract and final classes, class methods, magic methods, interfaces, object cloning and type hints, etc. And in the recently released PHP5.3 version, namespaces, delayed static binding and additional There are two magic methods __callStatic() and __invoke().
#So, how is it implemented at the bottom of PHP and what is its structure?
one. Class structure
Quoting an example of TIPI:
class ParentClass { } interface Ifce { public function iMethod(); } final class Tipi extends ParentClass implements Ifce { public static $sa = 'aaa'; const CA = 'bbb'; public function __constrct() { } public function iMethod() { } private function _access() { } public static function access() { } }
A parent class ParentClass, an interface Ifce, and a subclass Tipi are defined here. The subclass inherits the parent class ParentClass, implements the interface Ifce, and has a static variable $sa, a class constant CA, a public method, a private method and a public static method. How are these structures implemented inside the Zend engine? How are class methods and member variables stored? Access control, how are static members marked?
First, let’s look at the internal storage structure of the class:
Taking some fields of the above structure, we analyze the performance of the PHP code at the beginning of the article in the kernel. As follows:
Field name | Field description | ParentClass class | Ifce interface | Tipi class |
name | Class name | ParentClass | Ifce | Tipi |
type | category | 2 (user-defined) | 2 (user-defined) | 2 (user-defined, 1 is the system built-in class) |
parent | parentclass | empty | empty | ParentClass |
refcount | Reference count | 1 | 1 | 2 |
ce_flags | Type of class | 0 | 144 | 524352 |
Function list | empty | function_name=iMethod | type=2 | fn_flags=258 | function_name=__construct | type=2 | fn_flags=8448 | function_name=iMethod | type= 2 | fn_flags=65800 function_name=_access | type=2 | fn_flags=66560 function_name=access | type=2 | fn_flags=257 |
interfaces | Interface list | empty | empty | Ifce interface number is 1 |
filename | Storage file address | /tipi.php | /tipi.php | /ipi.php |
Class start line number | 15 | 18 | 22 | |
Class end line number | 16 | 20 | 38 |
The above is the detailed content of PHP core-detailed explanation of classes and object-oriented code. For more information, please follow other related articles on the PHP Chinese website!