Как вернуть TRUE | FALSE из класса в PHP - PullRequest
0 голосов
/ 25 августа 2009

Мне было интересно, почему моя программа php не возвращает правильное значение TRUE FALSE, когда класс включен в другом месте

это выглядит примерно так

source: signup.php

class signup
{
    function buildProfile()
    {
        if($logic){
            $this->success = TRUE;
        }else{
           $this->success = FALSE;
        }
    }
    function __construct()
    {
        $this->success = NULL;
        $this->buildProfile
        return $this->success;
    }
}

и в другом месте я делаю

include('signup.php');

$signup = new signup();

if($signup){
    successFunction();
}else....

но он не получает $ signup == true, он получает FALSE каждый раз

Ответы [ 6 ]

24 голосов
/ 25 августа 2009

Конструкторы всегда возвращают новый экземпляр класса . Вы не можете вернуть любой другой тип значения из конструктора. Лучший способ структурировать ваш код - что-то вроде:

source: signup.php

class Signup
{
    public $success;
    protected function buildProfile()
    {
        if($logic){
            $this->success = true;
        }else{
            $this->success = false;
        }
    }
    public function __construct()
    {
        $this->success = null;
        $this->buildProfile();
    }
}

Тогда, когда вы строите объект, вы можете сделать:

include('signup.php');

$signup = new Signup();

if($signup->success){
    successFunction();
}else....
3 голосов
/ 25 августа 2009

С этим здесь:

$signup = new signup();

Вы создаете экземпляр класса через его конструктор.

Конструктор не является нормальной функцией: я не думаю, что он действительно может "вернуть" что-либо: он просто здесь для инициализации некоторых данных в объекте при его создании.

При этом переменная $signup является объектом; экземпляр класса signup; это не какое-либо другое значение, какую бы инструкцию возврата вы ни написали в своем конструкторе.

Цитата из Страница Конструктора Википедии :

Конструктор похож на метод экземпляра, но он отличается от метод в том, что он никогда не имеет явный тип возврата, это не наследуется, и обычно имеет разные правила для модификаторов области.

1 голос
/ 25 сентября 2010

Кстати, не пишите такие вещи:

if($logic) {
    $this->success = true;
}else{
    $this->success = false;
}

напишите такие вещи:

$this->success = $logic;
0 голосов
/ 09 апреля 2010

Возможно, статический метод будет более уместным?

http://php.net/manual/en/language.oop5.static.php

include('signup.php');

if(Signup::buildProfile()){
    successFunction();
}else....
0 голосов
/ 25 августа 2009

Вы пытаетесь имитировать «функтор по умолчанию», функция, которая отсутствует в PHP до версии 5.3, например вы пытаетесь оценить объект, как если бы он был функцией (как сказано выше, `` new '' всегда возвращает вам экземпляры объекта). Объекты не являются функциями, поэтому функтор по умолчанию - это метод экземпляра, который автоматически выполняется, когда его объект вызывается как функция.

В любом случае, правильное решение в верхнем ответе.

0 голосов
/ 25 августа 2009

Невозможно вернуть значение из конструктора.

Единственная цель конструктора - инициализация объекта. В вашем примере $ signup - это ваш объект, а не «возвращаемое значение» из конструктора.

...