如何从PHP中的类返回TRUE | FALSE

时间:2009-08-24 22:49:27

标签: php class conditional return

我想知道为什么我的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 个答案:

答案 0 :(得分:24)

构造函数始终返回类的新实例。您不能从构造函数返回任何其他类型的值。构建代码的更好方法是:

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....

答案 1 :(得分:3)

在此处:

$signup = new signup();

您正在通过其构造函数创建该类的实例。

构造函数不是一个正常的函数:我认为它实际上不能“返回”任何东西:它只是在它的实例化时初始化对象中的一些数据。

这样,你$signup变量就是一个对象;类signup的实例;它不是任何其他类型的值,无论你在构造函数中写什么返回指令。

引自wikipedia's Constructor page

  

构造函数类似于   实例方法,但它不同于   方法,因为它从来没有   显式返回类型,它不是   继承,并且通常有不同   范围修饰符的规则。

答案 2 :(得分:1)

顺便说一句,不要写这样的东西:

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

写下这样的事情:

$this->success = $logic;

答案 3 :(得分:0)

您无法从构造函数返回值。

构造函数的唯一目的是初始化一个对象。在您的示例中,$ signup是您的对象,它不是构造函数的“返回值”。

答案 4 :(得分:0)

您正试图模仿“默认仿函数”,这是一种在PHP之前不存在于PHP中的功能,例如你试图评估一个对象,好像它是一个函数(如上所述,``new''总是返回你的对象实例)。对象不是函数,因此默认仿函数是一个实例方法,当它作为函数调用其对象时,它会自动执行。

无论哪种方式,正确的解决方案都在最佳答案中。

答案 5 :(得分:0)

也许静态方法更合适?

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

include('signup.php');

if(Signup::buildProfile()){
    successFunction();
}else....