I have this code. Is it possible for a User
object constructor to somehow fail so that $this->LoggedUser
is assigned a NULL
value and the object is freed after constructor returns?
$this->LoggedUser = NULL;
if ($_SESSION['verbiste_user'] != false)
$this->LoggedUser = new User($_SESSION['verbiste_user']);
maybe something like this:
Consider it this way. When you use
new
, you get a new object. Period. What you're doing is you have a function that searches for an existing user, and returns it when found. The best thing to express this is probably a static class function such as User::findUser(). This is also extensible to when you're deriving your classes from a base class.When a constructor fails for some unknown reason, it won't return a NULL value or FALSE but it throws an exception. As with everything with PHP5. If you don't handle the exception then the script will stop executing with an Uncaught Exception error.
AFAIK this can't be done,
new
will always return an instance of the object.What I usually do to work around this is:
Adding a
->valid
boolean flag to the object that determines whether an object was successfully loaded or not. The constructor will then set the flagCreating a wrapper function that executes the
new
command, returns the new object on success, or on failure destroys it and returnsfalse
-
I'd be interested to hear about alternative approaches, but I don't know any.
Assuming you're using PHP 5, you can throw an exception in the constructor:
For clarity, you could wrap this in a static factory method:
As an aside, some versions of PHP 4 allowed you to set $this to NULL inside the constructor but I don't think was ever officially sanctioned and the 'feature' was eventually removed.
A factory might be useful here: