PHP - функция конструктора не возвращает false
Как я могу позволить переменной $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 :(
Ответы
Ответ 1
Вы не можете вернуть значение из конструктора. Вы можете использовать exceptions для этого.
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
}
Вы также можете расширять исключения.
Ответ 2
Конструктор не должен ничего возвращать.
Если вам нужно проверить данные перед использованием для создания объекта, вы должны использовать класс factory.
Изменить: да, исключения тоже сделали бы трюк, но у вас не должно быть логики внутри конструктора. Это становится болью для модульного тестирования.
Ответ 3
Ты можешь попробовать
<?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();