471,336 Members | 1,270 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,336 software developers and data experts.

'Parse error' problem in "isset" and "empty"

I've been having some problems with a parse error that I can't figure
out (PHP 4.3.11 on Solaris9). Sample code:

<?php
// getting strange parse errors on this
class A {
var $value;
function A() {
$this->value = 1;
}

function getValue() {
return $this->value;
}
}

$a = new A();
if (!empty($a->getValue())) {
echo "success";
}
else {
echo "failure";
}
?>

The result of this is:

Parse error: parse error, unexpected '(', expecting ')' in
/foo/public_html/parse_errors.php on line 15

I also get the same effect with "isset", however, testing with "is_null"
or "is_int" produces the correct ("success"/"failure") result. Any ideas?

/Marcin
Aug 21 '05 #1
4 2465
Check out the following:

http://www.php.net/manual/en/function.empty.php

empty() and isset() only work on variables. In your case,
$a->getValue() is the return value of a function -- not a variable.
You could do something like:

$a = new A();
$v = $a->getValue();
if (!empty($v)) {
echo "success";
}
else {
echo "failure";
}

Alternatively, you could define your own isEmpty() function which does
whatever you want. It could be as simple as:

function isEmpty($value) {
return (strlen($value) == 0);
}

Also, as of PHP 5.1 you can overload calls to empty() and isset() on
object properties. Most useful when you also overload the getters and
settings (via __get() and __set()).

Aug 22 '05 #2
ZeldorBlat wrote:
Check out the following:

http://www.php.net/manual/en/function.empty.php

empty() and isset() only work on variables. In your case,
$a->getValue() is the return value of a function -- not a variable.
You could do something like:
Yea, thanks. I noticed this just as I posted the article, and then
promply canceled it, but it seems it didn't get canceled everywhere.
the is_int and is_null work differently, and it threw me off a bit.
$a = new A();
$v = $a->getValue();
if (!empty($v)) {
echo "success";
}
else {
echo "failure";
}
Yes, that's how I do it now. A bit of fuss, but works.
Alternatively, you could define your own isEmpty() function which does
whatever you want. It could be as simple as:

function isEmpty($value) {
return (strlen($value) == 0);
}
Yes, but again, "empty" checks for null, 0, etc. Which is useful.
Also, as of PHP 5.1 you can overload calls to empty() and isset() on
object properties. Most useful when you also overload the getters and
settings (via __get() and __set()).


Will have a lookie, but still working in 4.x level (and it's not
going to change anytime soon). Thanks.

/Marcin
Aug 22 '05 #3
Well, that's the beauty of writing your own isEmpty()...you can have it
do whatever you want. You could simulate PHP's empty() behavior pretty
easily:

function isEmpty($value) {
return (strlen($value) == 0 || is_null($value) || $value == 0);
}

Aug 22 '05 #4
Hello!
Well, that's the beauty of writing your own isEmpty()...you can have it
do whatever you want. You could simulate PHP's empty() behavior pretty
easily:

function isEmpty($value) {
return (strlen($value) == 0 || is_null($value) || $value == 0);
}


If you want to emulate PHP empty()'s behaviour completely (and only
then) you should use

function isEmpty($value) {
return empty($value);
}

I assume this is faster than doing the checks yourself.

Greetings,
Hero
Aug 22 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by newbie_mw | last post: by
reply views Thread by newbie_mw | last post: by
1 post views Thread by newbie_mw | last post: by
32 posts views Thread by Nuno Paquete | last post: by
1 post views Thread by Westcoast Sheri | last post: by
2 posts views Thread by Bob Stearns | last post: by
5 posts views Thread by Pseudonyme | last post: by
reply views Thread by rosydwin | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.