PHP конструкторы - PullRequest
       5

PHP конструкторы

3 голосов
/ 30 октября 2009
public function __construct($input = null) {
    if (empty($input)){
        return false;
    }

и есть код конструктора ...

я хотел бы, чтобы класс не инициализировался, если я передаю пустую переменную

$ classinstance = new myClass (); Я хочу, чтобы $ classinstance был пуст (или ложен)

Я думаю, что это невозможно, вот так. Какой простой способ добиться подобного результата?

Ответы [ 3 ]

5 голосов
/ 30 октября 2009

Вы можете сделать private обычным конструктором (чтобы его нельзя было использовать вне объекта, как если бы вы делали Singleton ) и создать 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);
        }
    }
}

Тогда вы бы создали такой класс:

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

(РЕДАКТИРОВАТЬ: теперь, если вы пытаетесь поддерживать только PHP5)

1 голос
/ 30 октября 2009

Вы можете использовать фабричный метод для создания объекта:

private function __construct($input = null) {
}

public static function create($input = null) {
    if (empty($input)) {
        return false;
    }
    return new MyObject($input);
}    
0 голосов
/ 30 октября 2009

Я верю, что вы правы. Print_r вашего нового объекта покажет, что он возвращает объект.

Вы могли бы сделать это исключение, но это вряд ли будет стиль, который вы хотите.

+1 по заводским методам уже выложен. Эти фабричные методы также могут быть такими:

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

Мне нравятся заводские методы: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...