views:

848

answers:

6

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']
+6  A: 

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
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
Yeah thanks for that. I almost never use this operator for the reasons I mentioned :)
Eran Galperin
the @ operator is slow
Tom Haigh
Another reason not to use it
Eran Galperin
Fully agree with the suggestion that this is not best practice.
Swish
+2  A: 
echo @$variable;
alexeit
+5  A: 

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
iirc this will still produce the error, since php is sending an undefined variable into a function, even though the isset is within it.
Ólafur Waage
It won't, because it is passed by reference.
Tom Haigh
A: 

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
I think echoVar needs to accept $var by reference, in order to not show an error.
Tom Haigh
+1  A: 

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.

too much php
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
A: 

using @ variable works. i did it.