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() {
}
}
Copy after login
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:
运行程序将报错,违反了第三条:Fatal error: Cannot declare property Tipi::$var final, the final modifier is allowed only for methods and classes in .. 这个错误由zend_do_declare_property函数抛出
If run directly, the program will report an error: Fatal error: Access type for interface method Ifce::method() must be omitted in This code corresponds to the code in the zend_do_begin_function_declaration function.
Four. Similarities and Differences between Method and Method Similarly, a series of logic is put into a collection for execution, but there are many differences in the use of the two. Here we discuss the implementation of the two. From an implementation point of view, the internal code of both is ultimately interpreted as op_array, and there is no difference in its execution (unless object-specific changes or methods such as $this/self are used), and the difference between the two is reflected in the two Aspects:
1. It is the implementation of definition (registration);
2. It is the implementation of the call;
## Implementation of the definition (registration) method
Functions and methods are registered in the compiler_globals variable during the compilation phase, and both use the same kernel processing functions zend_do_begin_function_declaration() and zend_do_end_function_declaration() to complete this process. The internal contents of the two will be eventually interpreted and stored as an op_codes array, but the "mounted" location after compilation is different, as shown below:
Registration location of functions and methods in PHP
Implementation of calling method
The difference in definition location and nature determines that methods are more complex than functions. More verification work, the method call has one more OPCODE named ZEND_INIT_METHOD_CALL
, than the function call Its function is to register the method to execute_data.fbc, and then you can use the same processing function as the function ZEND_DO_FCALL_BY_NAME
for processing.
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!
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals.
This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati
If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op
Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems.
With a large collection of extensions for many programming languages, VS Code can be c
JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,
A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase.
What is a vowel?
Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase:
a, e, i, o, u
Example 1
Input: String = "Tutorialspoint"
Output: 6
explain
The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total
This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an
Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.
What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.