


Develop Robust Code with PHP 3. Write Reusable Functions_PHP Tutorial
In Part 3 of this series on how to develop effective PHP code in real-world situations, Amol Hatwar discusses how to build the most efficient functional functions that can be used without sacrificing too much performance or manageability. The author focuses on writing reusable functions and shows how to avoid some of the most common problems associated with the task. Welcome back. In Part 1 of this series, I discussed some basic PHP design rules and showed you how to write code that is safe, simple, platform-independent, and fast. In Part 2, I introduced variables and discussed their use in PHP coding—good and bad practices. In this article, you will learn how to use functions wisely in PHP. In every high-level programming language, programmers can define functions, and PHP is no exception. The only difference is that you don't have to worry about the function's return type. Drill Down Functions can be used to: Encapsulate several lines of code into a single statement. Simplify the code. Most importantly, treat the application as a coordinated product of smaller applications. For developers coming to PHP from a compiled language such as C/C++, the performance levels of PHP are astonishing. User-defined functions are very expensive in terms of using CPU and memory resources. This is mainly because PHP is interpreted and loosely typed. Wrapper or not Some developers wrap every function they use simply because they don't like the name of the function, while other developers don't like using wrappers at all. Wrapping existing PHP functions without adding or supplementing existing functionality is completely unacceptable. In addition to increasing size and execution time, such renamed functions can sometimes create an administrative nightmare. Inline functions in your code can lead to baffling code and even greater management disasters. The only benefit of doing this may be faster code. A smarter approach is to only define functions when you need to use the code multiple times and there are no built-in PHP functions available for the task you want to achieve. You can choose to rename it or use it with restrictions only when needed. The graph in Figure 1 roughly shows how manageability and speed relate to the number of functions used. (I’m not specifying units here because the numbers depend on individual and team capabilities; this relationship is important to visualize.) Figure 1. Manageability/Speed vs. Number of functions Naming functions As I’ve done in this series of articles As mentioned in Part 2 (see Resources), for effective code management, it is essential to always use a common naming convention. Two other practices to consider are: Choose a name that gives a good hint of what the function does. Use a prefix that indicates the package or module. Assuming you have a module called user that contains user management functions, function names such as usr_is_online() and usrIsOnline() are good choices for functions that check whether the user is currently online. Compare the name above to a function name like is_online_checker(). The conclusion is that using verbs is better than using nouns because functions always do something. How many parameters? Most likely you will be using an already constructed function. Even if this is not the case, you may want to maximize the scope of your code. To do this, you and other developers should continue to develop functions that are easy to use. No one likes to use functions with parameters that are obscure and difficult to understand, so write functions that are easy to use. Choosing a name that explains the function's purpose (and reducing the number of arguments the function takes) is a good way to ensure ease of use. What is the magic number for the number of parameters? In my opinion, more than three parameters make the function difficult to remember. Complex functions with a large number of parameters can almost always be split into simpler functions. No one likes to use makeshift functions. Writing Good Functions Suppose you want to set the title of your HTML document before you put it in the browser. The title is everything between the
... tags. Suppose you want to set the title and meta tags. Instead of using the setHeader(title, name, value) function to do all the work, a better solution would be to use setTitle(title) and setMeta(name, value) to do each work separately. This scheme sets the title and meta tags independently of each other. Thinking further, a title can contain just one title tag, but it can contain multiple meta tags. If multiple meta tags need to be set, the code must call setMeta() multiple times. In this case, a better solution is to pass a two-dimensional array of name-value pairs to setMeta() and have the function loop over the array — all at the same time. In general, simultaneous functions like this are preferable. Calling a function once with all the data it needs to process is always better than calling the function multiple times and feeding it data incrementally. The main idea when writing functions is to minimize calls to them from other code. According to this, the setHeader() solution is really not a good idea. Obviously, we can refactor setHeader() into setHeader(title, array), but we must also consider that we lose the ability to set the title and meta tags independently of each other.Also, in a real environment, the title may contain multiple tags, not just title and meta tags. If you need to add more markup, you must change setHeader(), and all other code that depends on it. In the latter case, just write one more function. The following equation applies to all programming languages: Memorable names + clear arguments + speed and efficiency = good functions in all programming languages Coordinate functions in a layered approach Functions rarely exist alone. They work with other functions to exchange and process data to complete tasks. It's important to write functions that work well with other functions in the same group or module, because these groups of functions or modules are the ones you must be able to reuse. Let's continue with the hypothetical page building example. Here, the responsibility of this module is to build a page using HTML. (Let's skip the details and code for now, since the purpose of the example is just to illustrate how functions and groups of functions can easily work together while increasing the reusability factor.) Starting with the built-in PHP functions, you can Build abstract functions, use them to create more functions that handle basic needs, and then use these functions in turn to build application-specific functions. Figure 2 gives you an idea of how this works. Figure 2. Layered functions Now, the page is built in memory and then the completed page is dispatched to the browser. Building pages in memory has two major benefits: You can cache completed pages with your own scripts. If the page doesn't build successfully, you can scrap the half-finished page and point the browser to an error page. Now, your users will no longer see reports with error messages on the page. Depending on the structure of most pages, the page building blocks need to be divided into functions that perform the following functions: Draw the top bar Draw the navigation bar Display content Add footnotes You also need functions that perform the following functions: Cache the page Check whether the page has been cached If the page Already cached it displays let's call it the pagebuilder module. The page builder module performs its work by querying the database. Since the database is external to PHP, you will use the Database Abstraction Module, whose responsibility is to provide a homogeneous interface to the various vendor-specific database functions in PHP. The important functions in this module are: functions to connect to the database, functions to query the database, and functions to provide query results. Suppose you also want to implement a site-wide search engine. This module will be responsible for searching the site for documents related to a certain keyword or set of keywords and displaying the results based on the relevance of the search string or the most occurrences of that string. This module is used together with the Database Abstraction module if you also wish to log searches for auditing purposes. Remember that you will be accepting input from the user. You need to get it on the screen and discard content that looks malicious. This requires another module, which is responsible for validating the data submitted by the user through the form. By now, you must have a general idea of the concepts I'm talking about. The most core functionality must be broken down into logical modules, and to perform their tasks, applications must use the functions provided by these modules. Using this layered approach, a simple page-building rendering application might look like Figure 3. Figure 3. Layered page building application Note that in this example there is no hierarchy between the core module and the modules that handle the application. That is, core modules can call and declare functions from functions declared in abstract modules or layers below, but application code may not be able to do so. Application code should not declare functions in application code if they are "polluted" by or encapsulate any low-level functions. It can only use low-level functions. This proved to be a faster method. Functional Techniques Now that you understand how functions should be used and written, let's examine some common techniques. Using References Simply put, references are like pointers in the C language. The only difference is that in PHP, you don't need to use the * operator to dereference as in C. You can think of them as aliases for variables, arrays, or objects. No matter what you do, the alias will affect the actual variable. Listing 1 demonstrates an example. Listing 1. Variable reference When you pass an argument to a function, the function receives a copy of the argument. Any changes you make to the parameters will be lost as soon as the function returns. This can be a problem if you wish to change parameters directly. Listing 2 shows an example that illustrates this problem. Listing 2. Problems when passing arguments to functions We want to change $myNum directly; this is easily done by passing a reference to $myNum to the half() function. But keep in mind that this is not a good practice.Developers using your code must keep track of the references used. This can inadvertently cause errors to spread. It also affects the ease of use of the function. Better practice is to use the reference directly in the function declaration — in our case, use half(&$num) instead of half($num). This way, by remembering the reference, you don't have to remember to pass arguments to the function. PHP handles some things behind the scenes. Newer PHP versions (and subsequent versions from 4.0 onwards) deprecate passing by reference when calling, and will issue a warning anyway. (Here are some suggestions: If you are using code written for an earlier version of PHP, it is better to update the code rather than changing the behavior of PHP by changing the php.ini file.) Preserving variables between function calls often requires maintaining functions Variable values between calls. Global variables can be used, but variables are very fragile and can be corrupted by other functions. We want the variable to be local to the function and still retain its value. Using static keyword is a good solution. I often use this method when I want to count how many user-defined functions were executed when the debugger is not available. I just changed all the functions (using automated scripts of course) and added a call to the function that does the counting work on the first line of the function body. Listing 3 describes this function. Listing 3. Counting user-defined function function funcCount() { static $count = 0; return $count++; } Collect variables by calling funcCount() just before the script completes
PHP is used to build dynamic websites, and its core functions include: 1. Generate dynamic content and generate web pages in real time by connecting with the database; 2. Process user interaction and form submissions, verify inputs and respond to operations; 3. Manage sessions and user authentication to provide a personalized experience; 4. Optimize performance and follow best practices to improve website efficiency and security.

PHP uses MySQLi and PDO extensions to interact in database operations and server-side logic processing, and processes server-side logic through functions such as session management. 1) Use MySQLi or PDO to connect to the database and execute SQL queries. 2) Handle HTTP requests and user status through session management and other functions. 3) Use transactions to ensure the atomicity of database operations. 4) Prevent SQL injection, use exception handling and closing connections for debugging. 5) Optimize performance through indexing and cache, write highly readable code and perform error handling.

Using preprocessing statements and PDO in PHP can effectively prevent SQL injection attacks. 1) Use PDO to connect to the database and set the error mode. 2) Create preprocessing statements through the prepare method and pass data using placeholders and execute methods. 3) Process query results and ensure the security and performance of the code.

PHP and Python have their own advantages and disadvantages, and the choice depends on project needs and personal preferences. 1.PHP is suitable for rapid development and maintenance of large-scale web applications. 2. Python dominates the field of data science and machine learning.

PHP is widely used in e-commerce, content management systems and API development. 1) E-commerce: used for shopping cart function and payment processing. 2) Content management system: used for dynamic content generation and user management. 3) API development: used for RESTful API development and API security. Through performance optimization and best practices, the efficiency and maintainability of PHP applications are improved.

PHP makes it easy to create interactive web content. 1) Dynamically generate content by embedding HTML and display it in real time based on user input or database data. 2) Process form submission and generate dynamic output to ensure that htmlspecialchars is used to prevent XSS. 3) Use MySQL to create a user registration system, and use password_hash and preprocessing statements to enhance security. Mastering these techniques will improve the efficiency of web development.

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.

PHP is still dynamic and still occupies an important position in the field of modern programming. 1) PHP's simplicity and powerful community support make it widely used in web development; 2) Its flexibility and stability make it outstanding in handling web forms, database operations and file processing; 3) PHP is constantly evolving and optimizing, suitable for beginners and experienced developers.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

SublimeText3 English version
Recommended: Win version, supports code prompts!

WebStorm Mac version
Useful JavaScript development tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

Zend Studio 13.0.1
Powerful PHP integrated development environment