Functions in PHP
In simple terms, a function is a block of code that can be named and called repeatedly. Sometimes a function is also called a subroutine. We are used to the fact that a regular variable can be assigned a number, a string, or an array, and then get it back by referring to the value by the name of the variable. Functions are structured in a similar way. This is also a kind of variable, but instead of a string or a number, it stores a block of code that is called when using this “variable”.
A function is a very powerful code reuse tool. By creating your own function and writing the necessary code there, you can call and use it as many times as necessary. Otherwise, you would have to copy and paste the code snippet every time you need it.
To make our work easier, we can arrange as a function some part of the code that is used several times in the script. Then, instead of copying and pasting this part of the code, it will be enough to just call this function as if we were accessing a variable.
There are two types of functions – built-in and user-defined.
Built-in functions are functions that the creators of the programming language have already written for us, and we can just take them and use them. PHP has thousands of ready-made functions for all occasions!
One of these functions, already very familiar to us, is a function that displays the text passed to it on the screen – print ().
The programmer creates user functions independently. These functions are usually only used within a single project or even script.
Function Anatomy
As with ordinary variables, working with functions consists of declaring and using them.
Before using a new function, you must declare it:
<?php
function <function name>(<function argument>) {
<function body>
return <function execution result>;
}
The easiest way to explain all the components of a function is with an example.
Let’s say on our site we want to show whether the year selected by the user is a leap year. To do this, we will write a function into which the year is passed. As a result of the function, we want to get the value “true” if the year is a leap year, and “false” if not.
The definition of such a function:
<?php
function is_leap_year($year) {
if ($year % 4 != 0) {
return false;
}
elseif ($year % 100 == 0) {
if ($year % 400 == 0) {
return true;
}
else {
return false;
}
}
else {
return true;
}
}
An example of using the function:
<?php
$year = 2034;
if (!is_leap_year($year)) {
print(“2034 is a simple year”);
}
else {
print(“2034 is a leap year”);
}
You can practice using functions in PHP in this simulator.
Function arguments and scope
Our function is able to calculate whether the given year is a leap year.
It is important to understand that a function is like a program within a program. This means that inside such a function, variables that were defined outside of it will not be available. To pass information from outside to inside a function, you need to use function arguments.
Function arguments are variables that a function can receive from external code. In the is_leap_year example, there was only one such variable – $year.
The arguments are necessary because the function “does not see” variables defined outside its boundaries. Therefore, the necessary variables must be passed to it explicitly.
The reverse is also true – variables defined inside the function will not be accessible from outside. Such variables are called local because they are local to the function.
Unlike arguments, which can be multiple, a function can return only one value to the external code – using the “return” instruction (return). The return value is called the result of the function.
Attaching Files in PHP
PHP has support for calling one script from another. Using a special language construct, you can call a script from a separate file by its name, just as functions are called by name. This ability is called file connection. Moreover, such a file can be either a php script or any other text file. For example, an HTML page.
Why separate and include php scripts
PHP developers split the entire source code of the project into separate scripts to make them easier to work with. If you had to write all the code in one file, then such a scenario would become simply immense and it would become absolutely impossible to navigate there. Therefore, splitting code into different scenarios is a natural way to deal with complexity.
There is another positive effect of such a division. By separating repetitive blocks of code into separate scripts, you can reuse the same code in different files and include it only on demand. A good example is custom functions. It is very convenient to declare them in a separate script, and then include them where these functions are needed.
Ways to connect files
There are two language constructs for including files in PHP: require and require_once. How are they different? In fact, the differences between them are minimal. Both of these keywords include the file with the given name and raise an error if the given file does not exist.
However, the peculiarity of require_once is that the file will be included only once, even if this instruction is called several times with the same file name.
File connection examples
First, let’s see how easy it is to include one script inside another. To do this, we use the require statement. Let’s say we have two scripts: index.php and sub.php.
Sub.php file content:
<?php
print(“Hi, I’m content from sub.php!” . PHP_EOL);
The index.php file contains the code that will include the sub.php script:
<?php
require ‘sub.php’;
print(“And I’m index.php!” . PHP_EOL);
Fun fact: require can be used as a keyword or as a function.
The result will be the same:
<?php
require(‘sub.php’); // use as a function
print(“And I’m index.php!” . PHP_EOL);
Result of work:
Hello, I’m content from sub.php!
And I am index.php!
What happened? Two scripts seemed to stick together into one: all the contents of sub.php were executed and added to the beginning of the index.php script.
How to work with the require function is described in detail in this task.
Absolute and relative paths
When connecting a file, you can specify an absolute or relative path as its address.
An absolute path includes the full address of the file from the root of the drive.
Example: /var/www/web/site/inc/sub.php
A relative path only contains an address relative to the current working directory. So if the script is in the /var/www/web/site folder, then you can use the following path to connect the file: inc/sub.php
Always prefer to use relative paths so that the site will continue to work if it is moved to a different folder.
Useful Constants
PHP has useful built-in constants that come in handy for use in the path of an include file.
__DIR__ – Full path to the directory where the current script is located
__FILE__ – Full path to the current script
Visibility of Variables in Included Scripts
It should be remembered that since connecting files is just gluing them into one, then all variables in different scenarios also receive a common scope.
PHP does not have the module system that exists in other programming languages (Python, Java, ECMAScript 6). It is not possible to “import” only individual variables or functions from an included script.
It also follows from this that if you connect one script twice, then the variables and functions from it will also be declared again, and this may cause an error. So use require_once to prevent this from happening.