代码之家  ›  专栏  ›  技术社区  ›  Supernovah

如何在PHP中从类中返回true false

  •  0
  • Supernovah  · 技术社区  · 15 年前

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

    6 回复  |  直到 14 年前
        1
  •  24
  •   VoteyDisciple    15 年前

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

    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....
    
        2
  •  3
  •   Pascal MARTIN    15 年前

    在这里:

    $signup = new signup();
    

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

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

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

    引用 wikipedia's Constructor page :

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

        3
  •  1
  •   Zehntor    14 年前

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

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

    这样写:

    $this->success = $logic;
    
        4
  •  0
  •   Bruno Reis    15 年前

    不能从构造函数返回值。

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

        5
  •  0
  •   Mud Kips    15 年前

    您试图模仿一个“默认函数”,这是一个在5.3之前在PHP中不存在的特性,例如,您试图评估一个对象,就像它是一个函数一样(如上所述,“new”总是返回您的对象实例)。对象不是函数,所以默认的函数是一个实例方法,当它的对象作为函数被调用时,它会自动执行。

    不管怎样,正确的解决方案都在最上面的答案中。

        6
  •  0
  •   h0tw1r3    14 年前

    也许静态方法更合适?

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

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