DEV Community

Cover image for Some mistakes you may make in PHP
Thien DX
Thien DX

Posted on

4 2

Some mistakes you may make in PHP

Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world. Still during my work, I found it can have tricky behaviors that you may not aware of (yet) and create bugs in your code.
Here are some of the most common mistakes I encountered :

array_merge

Syntax : array_merge ( array ...$arrays ) : array
The function simply merges the elements of arrays together. But it also reset the keys of elements if it's numeric.
For example, a very basic use-case where you have arrays storing [UserId => UserName] :

$userArr1 = [1 => "John", "3" => "Mary"];
$userArr2 = [6 => "Ted", "22" => "Doe"];


$allUser = array_merge($userArr1, $userArr2);

// $allUser will be
// Array
// (
//    [0] => John
//    [1] => Mary
//    [2] => Ted
//    [3] => Doe
// )
Enter fullscreen mode Exit fullscreen mode

Casting the numeric value to string like (string)10 won't work. This behavior is same for array_merge_recursive(), so you should keep this in mind when calling these functions.

empty

Syntax : empty ( mixed $var ) : bool
This check whether a variable is empty. Many use this function to check whether a key is set in array. It's all good and simple until value 0 came in.
For example, an user submit formed validation code :

// Function to check all required field are provided by user
function checkRequiredFields ($input) {
    $requiredField = ['name', 'age', 'number_of_kids']; 
    $errors = '';
    foreach ($requiredField as $field) {
        if (empty($input[$field])) {
           $errors.= "$field is missing"; 
        }
    }
    return $errors;
}
// A valid use-case in real likfe
$userData = ['name' => 'John', 'age' => 22, 'number_of_kids' => 0];

$inputError = checkRequiredFields($userData);
// This return "number_of_kids is missing"
Enter fullscreen mode Exit fullscreen mode

This is because 0 is also considered as "empty" even though it's a valid response in many use-cases. I find people make this mistake mostly when validating user's input.
A work around is adding strlen($var)

!isset($input[$field]) || strlen($input[$field]) == 0
Enter fullscreen mode Exit fullscreen mode

Ternary operator (?:) vs null coalescing operator (??)

When your first argument is null, they're basically the same

$a = null;

print $a ?? 'default'; // default
print $a ?: 'default'; // default

$b = ['a' => null];

print $b['a'] ?? 'default'; // default
print $b['a'] ?: 'default'; // default
Enter fullscreen mode Exit fullscreen mode

Except that the Ternary operator will output an E_NOTICE when you have an undefined variable.

But when the first argument is not null, they are different :

$a = false ?? 'default'; // false
$b = false ?: 'default'; // default
Enter fullscreen mode Exit fullscreen mode

That's it.

Hope my short article can save you some debugging time.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

đź‘‹ Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay