【问题标题】:How to return TRUE|FALSE from class in PHP如何从 PHP 中的类返回 TRUE|FALSE
【发布时间】:2010-11-22 10:48:53
【问题描述】:

我想知道为什么当该类包含在其他地方时,我的 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

【问题讨论】:

  • 我想显而易见的问题是,什么是 $logic,它曾经是真的吗?

标签: php class conditional return


【解决方案1】:

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

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

【讨论】:

  • 关于“如果你使用 PHP4”的评论:没有人应该使用 PHP 4... 甚至不再维护它,即使是与安全相关的错误。如果在 PHP 中学习 OOP,则必须使用 PHP 5 ! (考虑到 __construct 的使用,它毕竟是 PHP 5:“public/var”并不是唯一改变的东西)
  • 我同意,尽管有太多人仍然停留在 PHP 4 上。你说得对,__construct 应该是一个赠品。我会相应地进行编辑。
  • 由于在类中指定了成功(应该如此),因此您不必将其初始化为 NULL,因为这是默认(非)值。
【解决方案2】:

在这里:

$signup = new signup();

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

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

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

引用wikipedia's Constructor page

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

【讨论】:

    【解决方案3】:

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

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

    这样写:

    $this->success = $logic;
    

    【讨论】:

    • 这取决于 $logic 的类型。如果它是一个字符串并且希望 $success 是布尔值,那么分配的值​​将是不正确的。 (尽管问题中给出的代码会为 $logic 生成“未定义”消息。)
    【解决方案4】:

    你不能从构造函数返回值。

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        也许静态方法更合适?

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

        include('signup.php');
        
        if(Signup::buildProfile()){
            successFunction();
        }else....
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-29
          • 1970-01-01
          • 1970-01-01
          • 2012-08-14
          • 2015-10-03
          • 1970-01-01
          • 2013-06-29
          相关资源
          最近更新 更多