


Example explanation of simple factory pattern in PHP_PHP tutorial
An example explanation of the simple factory pattern in PHP. You can refer to it briefly.
Simple factory pattern:
①Abstract base class: Define some abstract methods in the class to implement in subclasses
②Subclasses that inherit from abstract base classes: Implement abstract methods in the base class
③Factory class: used to instantiate objects
After reading the article, look back at this picture, the effect will be better
Use encapsulation Way
代码如下 | 复制代码 |
class Calc{ /** * 计算结果 * * @param int|float $num1 * @param int|float $num2 * @param string $operator * @return int|float */ public function calculate($num1,$num2,$operator){ try { $result=0; switch ($operator){ case '+': $result= $num1+$num2; break; case '-': $result= $num1-$num2; break; case '*': $result= $num1*$num2; break; case '/': if ($num2==0) { throw new Exception("除数不能为0"); } $result= $num1/$num2; break; return $result; } }catch (Exception $e){ echo "您输入有误:".$e->getMessage(); } } } $test=new Calc(); // echo $test->calculate(2,3,'+');//打印:5 echo $test->calculate(5,0,'/');//打印:您输入有误:除数不能为0 ?> |
Advantages: The above code uses object-oriented encapsulation features. As long as the include class is included, other pages can use it at will
Disadvantages: It cannot be flexibly expanded and maintained
For example: want To add a "remainder" operation, you need to add a branch statement in the switch statement block. The code needs to be changed as follows
Add branch statement
The code is as follows | Copy code |
代码如下 | 复制代码 |
class Calc{ public function calculate($num1,$num2,$operator){ try { $result=0; switch ($operator){ //......省略...... case '%': $result= $num1%$num2; break; //......省略...... } }catch (Exception $e){ echo "您输入有误:".$e->getMessage(); } } } ?> |
Code analysis: Using the above method to add new functional operations to the calculator has the following disadvantages
① It is necessary to modify the original code block, which may be modified in order to "add new functions" When I have the code, I accidentally correct the original code to the wrong one
② If there are many functions to be added, such as: 'power', 'square root', 'logarithm', 'trigonometric function', 'statistics' ', or add some programmer-specific calculation functions, such as: And, Or, Not, Xor, so you need to add N branch statements to the switch statement. Imagine that if a calculation function has twenty or thirty case branch statements, the code will exceed one screen. Not only will the readability of the code be greatly reduced, but the key is that in order to add small functions, other unrelated functions must be involved. Explanation, this greatly reduces the execution efficiency of the program
Solution: Adopt OOP inheritance and polymorphic ideas
Initial implementation of simple factory pattern
The code is as follows | Copy code |
代码如下 | 复制代码 |
/** * 操作类 * 因为包含有抽象方法,所以类必须声明为抽象类 */ abstract class Operation{ //抽象方法不能包含函数体 abstract public function getValue($num1,$num2);//强烈要求子类必须实现该功能函数 } /** * 加法类 */ class OperationAdd extends Operation { public function getValue($num1,$num2){ return $num1+$num2; } } /** * 减法类 */ class OperationSub extends Operation { public function getValue($num1,$num2){ return $num1-$num2; } } /** * 乘法类 */ class OperationMul extends Operation { public function getValue($num1,$num2){ return $num1*$num2; } } /** * 除法类 */ class OperationDiv extends Operation { public function getValue($num1,$num2){ try { if ($num2==0){ throw new Exception("除数不能为0"); }else { return $num1/$num2; } }catch (Exception $e){ echo "错误信息:".$e->getMessage(); } } } ?> |
adopts the object-oriented inheritance feature. First declare a virtual base class, and specify the method that the subclass must implement in the base class (getValue())
Analysis: By adopting the object-oriented inheritance feature , we can easily extend the original program, such as: 'power', 'square root', 'logarithm', 'trigonometric function', 'statistics' and so on.
Find the remainder
The code is as follows
|
Copy code
|
||||||||
/** */ class OperationRem extends Operation {
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
![]() Hot AI Tools![]() Undresser.AI UndressAI-powered app for creating realistic nude photos ![]() AI Clothes RemoverOnline AI tool for removing clothes from photos. ![]() Undress AI ToolUndress images for free ![]() Clothoff.ioAI clothes remover ![]() Video Face SwapSwap faces in any video effortlessly with our completely free AI face swap tool! ![]() Hot Article
What's New in Windows 11 KB5054979 & How to Fix Update Issues
3 weeks ago
By DDD
How to fix KB5055523 fails to install in Windows 11?
3 weeks ago
By DDD
InZoi: How To Apply To School And University
4 weeks ago
By DDD
How to fix KB5055518 fails to install in Windows 10?
3 weeks ago
By DDD
Where to find the Site Office Key in Atomfall
4 weeks ago
By DDD
![]() Hot Tools![]() Notepad++7.3.1Easy-to-use and free code editor ![]() SublimeText3 Chinese versionChinese version, very easy to use ![]() Zend Studio 13.0.1Powerful PHP integrated development environment ![]() Dreamweaver CS6Visual web development tools ![]() SublimeText3 Mac versionGod-level code editing software (SublimeText3) ![]() Hot Topics![]() 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 ![]() 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, ![]() 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. ![]() 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 ![]() 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. ![]() PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners. ![]() |