Daniel
Daniel

Reputation: 35684

php constructors

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?

Upvotes: 3

Views: 679

Answers (3)

philfreo
philfreo

Reputation: 43804

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)

Upvotes: 5

memnoch_proxy
memnoch_proxy

Reputation: 1954

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 :-)

Upvotes: 0

jheddings
jheddings

Reputation: 27563

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);
}    

Upvotes: 1

Related Questions