Home Backend Development PHP Tutorial 9 practical PHP functions and features you must master

9 practical PHP functions and features you must master

Jul 25, 2016 am 08:46 AM

This article is published by Tuosheng Technology, please follow my WeChat toceansoft

Even if you have been using PHP for many years, you will stumble upon some functions and features that you never knew about. Some of them are very useful but underutilized. Not everyone will read the manual and function reference page after page from cover to cover!
1, function with any number of parameters
You may already know that PHP allows defining functions with optional parameters. But there are also methods that completely allow any number of function parameters. The following is an example of optional parameters:
// function with 2 optional arguments
function foo($arg1 = ”, $arg2 = ”) {
echo “arg1: $arg1n”;
echo “arg2: $arg2n”;
}
foo(‘hello’,’world’);
/* prints:
arg1: hello
arg2: world
*/
foo();
/* prints:
arg1:
arg2:
*/
Now let’s see how to create a function that accepts any number of arguments. This time you need to use the func_get_args() function:
// yes, the argument list can be empty
function foo() {
// returns an array of all passed arguments
$args = func_get_args();
foreach ($args as $k => $v) {
echo “arg”.($k+1).”: $vn”;
}
}
foo();
/* prints nothing */
foo(‘hello’);
/* prints
arg1: hello
*/
foo(‘hello’, ‘world’, ‘again’);
/* prints
arg1: hello
arg2: world
arg3: again
*/
2, Use Glob() to find files
Many PHP functions have long, descriptive names. However, it can be difficult to tell what the glob() function can do unless you have used it many times and become familiar with it. Think of it as a more powerful version of the scandir() function, allowing you to search for files based on a pattern.
//get all php files
$files = glob(‘*.php’);
print_r($files);
/* output looks like:
Array
(
[0] => phptest.php
[1] =>pi.php
[2] => post_output.php
[3] => test.php
)
*/
You can get multiple files like this:
// get all php files AND txt files
$files = glob(‘*.{php,txt}’, GLOB_BRACE);
print_r($files);
/* output looks like:
Array
(
[0] => phptest.php
[1] =>pi.php
[2] => post_output.php
[3] => test.php
[4] => log.txt
[5] => test.txt
)
*/
Please note that these files can actually return a path, depending on the query conditions:
$files = glob('../images/a*.jpg');
print_r($files);
/* output looks like:
Array
(
[0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/
If you want to get the full path of each file, you can call the realpath() function:
$files = glob('../images/a*.jpg');
// applies the function to each array element
$files = array_map(‘realpath’,$files);
print_r($files);
/* output looks like:
Array
(
[0] => C:wampwwwimagesapple.jpg
[1] => C:wampwwwimagesart.jpg
)
*/
3, memory usage information
By detecting the memory usage of scripts, it is beneficial to code optimization. PHP provides a garbage collector and a very sophisticated memory manager. The amount of memory used by the script while executing may rise or fall. In order to get the current memory usage, we can use the memory_get_usage() function. If you need to get the highest memory usage at any point in time, you can use the memory_limit() function.
echo “Initial: “.memory_get_usage().” bytes n”;
/* prints
Initial: 361400 bytes
*/
// let’s use up some memory
for ($i = 0; $i < 100000; $i++) {
$array []= md5($i);
}
// let’s remove half of the array
for ($i = 0; $i < 100000; $i++) {
unset($array[$i]);
}
echo “Final: “.memory_get_usage().” bytes n”;
/* prints
Final: 885912 bytes
*/
echo “Peak: “.memory_get_peak_usage().” bytes n”;
/* prints
Peak: 13687072 bytes
*/
4, CPU usage information
For this, we need to use the getrusage() function. Please keep in mind that this function is not available on Windows platforms.
print_r(getrusage());
/* prints
Array
(
[ru_oublock] => 0
[ru_inblock] => 0
[ru_msgsnd] => 2
[ru_msgrcv] => 3
[ru_maxrss] => 12692
[ru_ixrss] => 764
[ru_idrss] => 3864
[ru_minflt] => 94
[ru_majflt] => 0
[ru_nsignals] => 1
[ru_nvcsw] => 67
[ru_nivcsw] => 4
[ru_nswap] => 0
[ru_utime.tv_usec] => 0
[ru_utime.tv_sec] => 0
[ru_stime.tv_usec] => 6269
[ru_stime.tv_sec] => 0
)
*/
This may seem a bit mysterious unless you already have sysadmin rights. Here's a description of each value (you don't need to remember these):
ru_oublock: block output operations
ru_inblock: block input operations
ru_msgsnd: messages sent
ru_msgrcv: messages received
ru_maxrss: maximum resident set size
ru_ixrss: integral shared memory size
ru_idrss: integral unshared data size
ru_minflt: page reclaims
ru_majflt: page faults
ru_nsignals: signals received
ru_nvcsw: voluntary context switches
ru_nivcsw: involuntary context switches
ru_nswap: swaps
ru_utime.tv_usec: user time used (microseconds)
ru_utime.tv_sec: user time used (seconds)
ru_stime.tv_usec: system time used (microseconds)
ru_stime.tv_sec: system time used (seconds)
To know how much CPU power the script consumes, we need to look at the values ​​of the ‘user time’ and ‘system time’ parameters. The seconds and microseconds parts are provided separately by default. You can divide by 1 million microseconds and add the seconds parameter value to get a total number of seconds in decimal form. Let’s look at an example:
// sleep for 3 seconds (non-busy)
sleep(3);
$data = getrusage();
echo “User time: “.
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000);
echo “System time: “.
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000);
/* prints
User time: 0.011552
System time: 0
*/
Even though the script took about 3 seconds to run, the CPU usage was very, very low. Because during sleep running, the script actually consumes no CPU resources. There are many other tasks that may take a while but do not take up CPU time like waiting for disk operations. So as you can see, the CPU usage and the actual length of the run time are not always the same. Here is an example:
// loop 10 million times (busy)
for($i=0;$i<10000000;$i++) {
}
$data = getrusage();
echo “User time: “.
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000);
echo “System time: “.
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000);
/* prints
User time: 1.424592
System time: 0.004204
*/
This took about 1.4 seconds of CPU time, but almost all of it was user time since there were no system calls. System time is the CPU overhead spent executing a program's system calls. Here is an example:
$start = microtime(true);
// keep calling microtime for about 3 seconds
while(microtime(true) – $start < 3) {
}
$data = getrusage();
echo “User time: “.
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000);
echo “System time: “.
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000);
/* prints
User time: 1.088171
System time: 1.675315
*/
Now we have quite a bit of system time taken up. This is because the script calls the microtime() function multiple times, which requires a request to the operating system to get the required time. You may also notice that the run times add up to less than 3 seconds. This is because it is possible that there are other processes on the server at the same time and the script is not using 100% of the CPU for the entire 3 second duration.
5, magic constant
PHP provides useful functions such as obtaining the current line number (__LINE__), file path (__FILE__), directory path (__DIR__), function name (__FUNCTION__), class name (__CLASS__), method name (__METHOD__) and namespace (__NAMESPACE__) Magic constants. I won’t go into them all in this article, but I will tell you some use cases. When including other script files, use the __FILE__ constant (or use the new __DIR__ constant in PHP5.3):
// this is relative to the loaded script’s path
// it may cause problems when running scripts from different directories
require_once(‘config/database.php’);
// this is always relative to this file’s path
// no matter where it was included from
require_once(dirname(__FILE__) . ‘/config/database.php’);
Using __LINE__ makes debugging easier. You can track the specific line number.
// some code
// …
my_debug(“some debug message”,__LINE__);
/* prints
Line 4: some debug message
*/
// some more code
// …
my_debug(“another debug message”, __LINE__);
/* prints
Line 11: another debug message
*/
function my_debug($msg, $line) {
echo “Line $line: $msgn”;
}
6, Generate unique identifier
In some scenarios, it may be necessary to generate a unique string. I see a lot of people using the md5() function even though it's not exactly meant for this purpose:
// generate unique string
echo md5(time() . mt_rand(1,1000000));
There is actually a PHP function named uniqid() that ismeant to be used for this.
// generate unique string
echo uniqid();
/* prints
4bd67c947233e
*/
// generate another unique string
echo uniqid();
/* prints
4bd67c9472340
*/
You may notice that although the string is unique, the first few characters are similar, this is because the generated string is relative to the server time. But there is actually a friendly aspect, since each newly generated ID will be arranged in alphabetical order, so sorting becomes simple. To reduce the probability of duplication, you can pass a prefix, or a second argument to increase entropy:
// with prefix
echo uniqid(‘foo_’);
/* prints
foo_4bd67d6cd8b8f
*/
// with more entropy
echo uniqid(”,true);
/* prints
4bd67d6cd8b926.12135106
*/
// both
echo uniqid(‘bar_’,true);
/* prints
bar_4bd67da367b650.43684647
*/
This function will produce a shorter string than md5(), saving some space.
7, Serialization
Have you ever encountered a situation where you need to store a complex variable in a database or text file? You may not be able to think of a good way to format a string and convert it to an array or object, PHP has this functionality ready for you. There are two popular ways to serialize variables. Here is an example using the serialize() and unserialize() functions:
// a complex array
$myvar = array(
‘hello’,
42,
array(1,’two’),
‘apple’
);
// convert to a string
$string = serialize($myvar);
echo $string;
/* prints
a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3: "two";}i:3;s:5:"apple";}
*/
// you can reproduce the original variable
$newvar = unserialize($string);
print_r($newvar);
/* prints
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)
[3] => apple
)
*/
This is the native PHP serialization method. However, due to the popularity of JSON in recent years, support for the JSON format has been added to PHP5.2. Now you can use json_encode() and json_decode() functions:
// a complex array
$myvar = array(
‘hello’,
42,
array(1,’two’),
‘apple’
);
// convert to a string
$string = json_encode($myvar);
echo $string;
/* prints
["hello",42,[1,"two"],"apple"]
*/
// you can reproduce the original variable
$newvar = json_decode($string);
print_r($newvar);
/* prints
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)
[3] => apple
)
*/
This will be more efficient and especially compatible with many other languages ​​such as JavaScript. However, for complex objects, some information may be lost.
8, Compressed String
When talking about compression, we usually think of file compression, such as ZIP compression, etc. String compression is also possible in PHP, but does not involve any compressed files. In the following example, we will make use of the gzcompress() and gzuncompress() functions:
$string =
“Lorem ipsum dolor sit amet, consectetur
Adipiscing elit. Nunc ut elit id mi ultricies
Adipiscing. Nulla facilisi. Praesent pulvinar,
sapien vel feugiat vestibulum, nulla dui pretium orci,
non ultricies elit lacus quis ante. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Aliquam
Pretium ullamcorper urna quis iaculis. Etiam ac massa
sed turpis tempor luctus. Curabitur sed nibh eu elit
mollis congue. Praesent ipsum diam, consectetur vitae
ornare a, aliquam a nunc. In id magna pellentesque
tellus posuere adipiscing. Sed non mi metus, at lacinia
augue. Sed magna nisi, ornare in mollis in, mollis
sed nunc. Etiam at justo in leo congue mollis.
Nullam in neque eget metus hendrerit scelerisque
eu non enim. Ut malesuada lacus eu nulla bibendum
id euismod urna sodales. ";
$compressed = gzcompress($string);
echo "Original size: ". strlen($string)."n";
/* prints
Original size: 800
*/
echo “Compressed size: “. strlen($compressed).”n”;
/* prints
Compressed size: 418
*/
// getting it back
$original = gzuncompress($compressed);
The compression rate of this operation can reach about 50%. The additional functions gzencode() and gzdecode() can achieve similar results by using different compression algorithms.
9, registration shutdown function
There is a function called register_shutdown_function(), which allows you to execute some specified code before a certain script completes running. Let's say you need to capture some baseline statistics before the end of script execution, such as the length of time it ran:
// capture the start time
$start_time = microtime(true);
// do some stuff
// …
// display how long the script took
echo “execution took: “.
(microtime(true) – $start_time).
"seconds.";
This may seem trivial, you just need to add the relevant code at the end of the script running. But if you have called the exit() function, the code will not run. Additionally, if there is a fatal error, or the script is unexpectedly terminated by the user, it may not run again. When you use the register_shutdown_function() function, the code will continue to execute regardless of whether the script stops running:
$start_time = microtime(true);
register_shutdown_function(‘my_shutdown’);
// do some stuff
// …
function my_shutdown() {
global $start_time;
echo “execution took: “.
(microtime(true) – $start_time).
"seconds.";
}
If you like my article, please follow my WeChat toceansoft



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 Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1654
14
PHP Tutorial
1252
29
C# Tutorial
1225
24
Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

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,

How does session hijacking work and how can you mitigate it in PHP? How does session hijacking work and how can you mitigate it in PHP? Apr 06, 2025 am 12:02 AM

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

What is REST API design principles? What is REST API design principles? Apr 04, 2025 am 12:01 AM

RESTAPI design principles include resource definition, URI design, HTTP method usage, status code usage, version control, and HATEOAS. 1. Resources should be represented by nouns and maintained at a hierarchy. 2. HTTP methods should conform to their semantics, such as GET is used to obtain resources. 3. The status code should be used correctly, such as 404 means that the resource does not exist. 4. Version control can be implemented through URI or header. 5. HATEOAS boots client operations through links in response.

How do you handle exceptions effectively in PHP (try, catch, finally, throw)? How do you handle exceptions effectively in PHP (try, catch, finally, throw)? Apr 05, 2025 am 12:03 AM

In PHP, exception handling is achieved through the try, catch, finally, and throw keywords. 1) The try block surrounds the code that may throw exceptions; 2) The catch block handles exceptions; 3) Finally block ensures that the code is always executed; 4) throw is used to manually throw exceptions. These mechanisms help improve the robustness and maintainability of your code.

What are anonymous classes in PHP and when might you use them? What are anonymous classes in PHP and when might you use them? Apr 04, 2025 am 12:02 AM

The main function of anonymous classes in PHP is to create one-time objects. 1. Anonymous classes allow classes without names to be directly defined in the code, which is suitable for temporary requirements. 2. They can inherit classes or implement interfaces to increase flexibility. 3. Pay attention to performance and code readability when using it, and avoid repeatedly defining the same anonymous classes.

What is the difference between include, require, include_once, require_once? What is the difference between include, require, include_once, require_once? Apr 05, 2025 am 12:07 AM

In PHP, the difference between include, require, include_once, require_once is: 1) include generates a warning and continues to execute, 2) require generates a fatal error and stops execution, 3) include_once and require_once prevent repeated inclusions. The choice of these functions depends on the importance of the file and whether it is necessary to prevent duplicate inclusion. Rational use can improve the readability and maintainability of the code.

Explain different error types in PHP (Notice, Warning, Fatal Error, Parse Error). Explain different error types in PHP (Notice, Warning, Fatal Error, Parse Error). Apr 08, 2025 am 12:03 AM

There are four main error types in PHP: 1.Notice: the slightest, will not interrupt the program, such as accessing undefined variables; 2. Warning: serious than Notice, will not terminate the program, such as containing no files; 3. FatalError: the most serious, will terminate the program, such as calling no function; 4. ParseError: syntax error, will prevent the program from being executed, such as forgetting to add the end tag.

PHP and Python: Comparing Two Popular Programming Languages PHP and Python: Comparing Two Popular Programming Languages Apr 14, 2025 am 12:13 AM

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.

See all articles