Asked  7 Months ago    Answers:  2   Viewed   27 times

I would think the following piece of code should work, but it doesn't (Edited: Now works in PHP 5.5+):

if (!empty($r->getError()))

Where getError() is simply:

public function getError()
{
    return $this->error;
}

Yet I end up with this error:

can't use method return value in write context

What does this mean? Isn't this just a read?

 Answers

14

empty() needs to access the value by reference (in order to check whether that reference points to something that exists), and PHP before 5.5 didn't support references to temporary values returned from functions.

However, the real problem you have is that you use empty() at all, mistakenly believing that "empty" value is any different from "false".

Empty is just an alias for !isset($thing) || !$thing. When the thing you're checking always exists (in PHP results of function calls always exist), the empty() function is nothing but a negation operator.

PHP doesn't have concept of emptyness. Values that evaluate to false are empty, values that evaluate to true are non-empty. It's the same thing. This code:

$x = something();
if (empty($x)) …

and this:

$x = something();
if (!$x) …

has always the same result, in all cases, for all datatypes (because $x is defined empty() is redundant).

Return value from the method always exists (even if you don't have return statement, return value exists and contains null). Therefore:

if (!empty($r->getError()))

is logically equivalent to:

if ($r->getError())
Wednesday, March 31, 2021
 
devo
answered 7 Months ago
44

Replace the first if statement with if( ! $this->session->userdata('user_id') ).

The empty function check if a variable is empty but userdata is a function. Additionally, for your information, according to the CodeIgniter documentation, the userdata function returns FALSE if the item doesn't exist, which means that if user_id doesn't exist in your session, the code in the else will be executed.

Wednesday, March 31, 2021
 
subroutines
answered 7 Months ago
Only authorized users can answer the question. Please sign in first, or register a free account.
Not the answer you're looking for? Browse other questions tagged :