4

I'm just wondering if there is a quick way to echo undefined variables without getting a warning? (I can change error reporting level but I don't want to.) The smallest I have so far is:

isset($variable)?$variable:''

I dislike this for a few reasons:

  • It's a bit "wordy" and complex
  • $variable is repeated
  • The echoing of a blank string always kind of annoys me.
  • My variable names will probably be longer, eg $arrayvar['parameter']
DisgruntledGoat
  • 70,219
  • 68
  • 205
  • 290
  • Really not a good idea. If that's seems to be "It's a bit "wordy" and complex", then you'll have some surprise in the future... There is no way this going to be you app bottleneck. Start using the good habit of checking var. Make you own function to speed up the process if you like. – Bite code Dec 19 '08 at 10:32
  • @esatis: I'm not talking about speed at all... – DisgruntledGoat Jul 10 '09 at 12:20

7 Answers7

15

You can run it with the error suppression operator @.

echo @$variable;

However, it's best not to ignore unset variables. Unset variables could indicate a logical error on the script, and it's best to ensure all variables are set before use.

Eran Galperin
  • 86,251
  • 24
  • 115
  • 132
  • The one exception I usually find myself making to this rule is unset array indexes. These can crop up all over the place. It's also better to put it on the variable itself as @$variable, so that it only supresses the unset error. – Matthew Scharley Dec 18 '08 at 01:35
  • Yeah thanks for that. I almost never use this operator for the reasons I mentioned :) – Eran Galperin Dec 18 '08 at 01:39
  • 1
    Fully agree with the suggestion that this is not best practice. – Robert Swisher Dec 19 '08 at 00:42
9

you could use the ifsetor() example taken from here:

function ifsetor(&$variable, $default = null) {
    if (isset($variable)) {
        $tmp = $variable;
    } else {
        $tmp = $default;
    }
    return $tmp;
}

for example:

echo ifsetor($variable);
echo ifsetor($variable, 'default');

This does not generate a notice because the variable is passed by reference.

Tom Haigh
  • 57,217
  • 21
  • 114
  • 142
3
echo @$variable;
Alexei Tenitski
  • 9,030
  • 6
  • 41
  • 50
1

This is a long-standing issue with PHP, they intend to fix it with isset_or() (or a similar function) in PHP 6, hopefully that feature will make it into PHP 5.3 as well. For now, you must use the isset()/ternary example in your question, or else use the @ prefix to silence the error. IMHO, this is the only circumstance that justifies using @ in PHP.

I wouldn't worry about speed issues using echo with an empty string, it is probably more expensive to wrap it in an if clause than to just echo empty string.

Community
  • 1
  • 1
too much php
  • 88,666
  • 34
  • 128
  • 138
  • I find @ to be useful when doing database connections or file operations where a failure would show errors. eg: "if ($fh = @fopen('myfile', 'w'))" - it lets you gracefully handle any problems. – nickf Dec 19 '08 at 00:57
1

You can use ?? selector for PHP 7 and later.

echo $variable??'not defined';
Alper AKPINAR
  • 71
  • 3
  • 10
0

undefined variables are very common, i suggest you to initialize variable with null at first

$var = null;

or disable error reporting for notices:

error_reporting(E_ALL^E_NOTICE);
Tomasz
  • 595
  • 1
  • 7
  • 18
-1

Suppress errors using the @-operator forces the interpreter to change error level, executing the function and then change back error level. This decreases your scripts runtime.

Build a function like this will eliminate at least 3 of your reasons:

function echoVar($var, $ret=NULL) {
    return isset($var)?$var:$ret;
}

echoVar($arrayvar['parameter']);

But why echoing undefined variables? This sounds like not really well coded...

smartcoder
  • 129
  • 4