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