2016-01-24 1 views
1

я заметил, что конструкторы в классах PHP не может возвращать значение, отличное от объектов, когда неявно вызывается из вне класса:Почему конструкторы не могут вернуть значение, отличное от объекта, даже если это явно указано?

class A 
{ 
function __construct() 
{ 
    return FALSE; 
} 

function aFunctionInside() 
{ 
$aVar = $this->__construct(); 
echo gettype($aVar); 
} 
} 

$A = new A; 
$A->aFunctionInside(); // boolean 
echo gettype ($A); //object 

Является ли это поведение полезно в любом случае?

+1

Логически вы получаете экземпляр как «возвращаемое значение», так как (и почему) вы ожидаете, что что-нибудь еще будет возвращено? И почему вы хотите вызвать конструктора в любых других обстоятельствах? –

+0

Непонятно, что именно вы говорите .... Если вам нужно создать несколько объектов, по одному для каждого $ _POST, затем использовать объект коллекции, создать экземпляр этого экземпляра и создать экземпляр объектов для каждого отдельного $ _POST var –

+0

@MarkBaker Извините, я набрал его неправильно. Я думал о случае, когда я получаю данные формы через POST, и вам нужно подсчитать, сколько полей было заполнено в форме. Если бы я хотел сделать всю входную санитацию внутри конструктора, тогда я должен посчитать ее, избежать специальных символов, всех внутренних конструкторов и во время процесса санитарии, если что-то не так с вводом, я могу отметить, что, вернув false от конструктора. Я знаю, что конструктор не подходит для такого рода вещей, поэтому я никогда не буду этого делать. Просто пример. –

ответ

2

Конструктор неявно вызывается при создании объекта (с new). Однако его возвращаемое значение не используется в этом случае и не имеет ничего общего с создаваемым объектом.

Это не конструктор, который создает объект, потому что даже без него объект будет создан в любом случае. Более того, когда конструктор работает, объект уже существует.

Возвращаемое значение не ожидается от конструктора. По the manual он не имеет типа возвращаемого значения:

Конструктора

void __construct ([ mixed $args = "" [, $... ]]) 

Вы, конечно, вольно вернуть что-то и использовать его при вызове этой функции в явном виде, как и с любой другой функцией , но не ожидайте, что вызовите создание другого экземпляра вашего класса. Для этого вам нужно использовать синтаксис new.

Возвращаемое значение не играет роли, когда оно неявно называется во время создания объекта: в этом случае игнорируется обратное значение.

+0

Добро пожаловать. – trincot

Смежные вопросы