Search code examples
phpisset

php testing isset() and empty() in a function


I am trying to encapsulate isset() and empty() in a function.

It worked fine on my home development sever (apache 2.4.3, PHP 5.2.17 under WinXP). When I ported it to my university Linux machine running Fedora, I got a notice about undefined index.

I checked my php.ini on my home computer, and error reporting is set to all. I put error_reporting(E_ALL); in my PHP script to try duplicate the error. It didn't happen.

Question 1: Why am I not getting the notice on my home development computer?

Here is my function:

<?php
function there($s) {
    if (! isset($s)) {
        return false;
        }
    if (empty($s)) {
        return false;
        }
    return true;
}
?>

Here I test if a session variable exists:

if (! there($_SESSION['u'])) {
    $_SESSION['u'] = new User();
    }

I switched my function so that I test empty() before I test isset() thinking this will avoid getting the notice. I haven't had a chance yet to test this at school.

Question 2: Does empty() in general avoid giving a notice if the variable is undefined, or not set?

Question 3: Can I use my there() function to do this, or will I get the notice just by passing the undefined or unset parameter?


Solution

  • Your function is almost equivalent to !empty:

    if (empty($_SESSION['u'])) {
        $_SESSION['u'] = new User();
    }
    

    The only difference is: your wrapper function will complain if it's passed a variable that doesn't exist - whereas, as a language construct empty will not (and neither will isset).

    Your sub-questions

    Why am I not getting the notice on my home development computer?

    Probably because you've got error reporting turned off.

    Does empty() in general avoid giving a notice if the variable is undefined, or not set?

    Yes.

    Can I use my there() function to do this, or will I get the notice just by passing the undefined or unset parameter?

    You will get notices about undefined variables.