PHP - функция конструктора не возвращает false - PullRequest
22 голосов
/ 07 мая 2011

Как я могу сообщить переменной $foo ниже, что foo должно быть ложным?

class foo extends fooBase{

  private
    $stuff;

  function __construct($something = false){
    if(is_int($something)) $this->stuff = &getStuff($something);
    else $this->stuff = $GLOBALS['something'];

    if(!$this->stuff) return false;
  }

}

$foo = new foo(435);  // 435 does not exist
if(!$foo) die(); // <-- doesn't work :(

Ответы [ 3 ]

33 голосов
/ 07 мая 2011

Вы не можете вернуть значение из конструктора.Для этого вы можете использовать исключения .

function __construct($something = false){
    if(is_int($something)) $this->stuff = &getStuff($something);
    else $this->stuff = $GLOBALS['something'];

    if (!$this->stuff) {
        throw new Exception('Foo Not Found');
    }
}

И в своем коде реализации:

try {
    $foo = new foo(435);
} catch (Exception $e) {
    // handle exception
}

Вы также можете расширить исключения.

4 голосов
/ 07 мая 2011

Конструктор не должен ничего возвращать.

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

Редактировать: да, исключения будутпроделайте тоже самое, но у вас не должно быть никакой логики внутри конструктора.Это становится болью для юнит-тестирования.

1 голос
/ 22 декабря 2018

Можно попробовать

<?php

function __construct($something = false){ 
    $this->stuff = $something; 
}

static function init($something = false){
    $stuff = is_int($something) ? &getStuff($something) : $GLOBALS['something'];
    return $stuff ? new self($stuff) : false;
}


$foo = foo::init(435);  // 435 does not exist
if(!$foo) die();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...