3
public function __construct($input = null) {
    if (empty($input)){
        return false;
    }

and then there's some constructor code...

what I would like to do is for the class to not initialize if I pass an empty variable

$classinstance = new myClass(); I want $classinstance to be empty (or false)

I think this is not possible like this, What's an easy way to accomplish a similar result?

3 Answers 3

5

You could make private the normal constructor (so it can't be used from outside the object, like you would if you were making a Singleton) and create a Factory Method.

class MyClass {
    private function __construct($input) {
        // do normal stuff here
    }
    public static function factory($input = null) {
        if (empty($input)){
            return null;
        } else {
            return new MyClass($input);
        }
    }
}

Then you would instantiate a class like this:

$myClass = MyClass::factory($theInput);

(EDIT: now assuming you're only trying to support PHP5)

Sign up to request clarification or add additional context in comments.

4 Comments

would I still need the __construct ?
I think you have this the wrong way around. The constructor should be called __construct(), unless you need to support PHP4. __construct is newer.
(I think that's what he meant) anyway, I realized why you had the constructor private, but I find I can do all that stuff in the factory. That way I can use the constructor if I need.
I edited my answer - you guys are right, my note about __construct() was mixed up.
1

You could use a factory method to create the object:

private function __construct($input = null) {
}

public static function create($input = null) {
    if (empty($input)) {
        return false;
    }
    return new MyObject($input);
}    

2 Comments

and I believe that your create method should be a static method, like in my solution.
IIRC, PHP will still recognize the call, but putting static is more explicit and ensures no '$this' pointer.
0

I believe you are correct. A print_r of your new object will show it returns an object.

You could make it throw an exception, but that's unlikely to be the style you want.

+1 on factory methods already posted. Those factory methods might also be like:

public static function newCreate( $a ) { return ( !$a ) ? false : new foo( $a ); }

I like factory methods :-)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.