当前位置: 首页 > 面试题库 >

PHP构造函数返回NULL

田易安
2023-03-14
问题内容

我有这个代码。User对象构造函数是否有可能以某种方式失败,从而$this->LoggedUser为它分配了一个NULL值,并在构造函数返回后释放了该对象?

$this->LoggedUser = NULL;
if ($_SESSION['verbiste_user'] != false)
  $this->LoggedUser = new User($_SESSION['verbiste_user']);

问题答案:

假设您使用的是PHP 5,则可以在构造函数中引发异常:

class NotFoundException extends Exception {}

class User {
    public function __construct($id) {
        if (!$this->loadById($id)) {
             throw new NotFoundException();
        }
    }
}

$this->LoggedUser = NULL;
if ($_SESSION['verbiste_user'] != false) {
    try {
        $this->LoggedUser = new User($_SESSION['verbiste_user']);
    } catch (NotFoundException $e) {}
}

为了清楚起见,您可以将其包装在静态工厂方法中:

class User {
    public static function load($id) {
        try {
            return new User($id);
        } catch (NotFoundException $unfe) {
            return null;
        }
    }
    // class body here...
}

$this->LoggedUser = NULL;
if ($_SESSION['verbiste_user'] != false)
    $this->LoggedUser = User::load($_SESSION['verbiste_user']);

顺便说一句,某些版本的PHP 4允许您在构造函数中将$ this设置为NULL,但我认为这从未得到正式批准,并且最终删除了“功能”。



 类似资料:
  • 问题内容: 如果我在构造函数中返回一些值或对象,那么var会得到什么? 在两种情况下都会得到什么n? 其实这是一个测验问题,答案是什么? 自定义对象构造函数返回什么? a)新实例化的对象 b)未定义-构造函数不返回值 c)不论return语句是 d)等于return语句是什么;新实例化的对象(如果没有return语句) 问题答案: 我发现了这个很棒的链接: 上面提到的第二点魔术是构造函数返回特定的

  • 本文向大家介绍php构造函数与析构函数,包括了php构造函数与析构函数的使用技巧和注意事项,需要的朋友参考一下 php构造函数是对象创建完成后,第一个自动调用的方法,析构函数是当对象被释放之前最后一个自动调用的方法。本文章向大家介绍php构造函数与析构函数。 php构造函数 1.是对象创建完成后,“第一个”“自动调用”的方法 2.构造方法的定义,方法名是一个固定的, 在php4中:和类名相同的方法

  • 问题内容: 到目前为止,我在构造函数中有一个类 的功能是在数据库中查找特定的电子邮件地址。当我将标识符设置为某些电子邮件时,我确定它不在数据库中;第一个IF被传递,并转到第一个ELSE。这里的构造函数应该返回FALSE; 但是,它返回具有所有NULL值的类的对象! 我如何防止这种情况?谢谢 编辑: 谢谢大家的回答。那太快了!我看到OOP方式是抛出异常。因此,抛出一个问题,我的问题发生了变化,我应该

  • 问题内容: 这个问题已经在这里有了答案 : java“ void”和“ non void”构造函数 (4个答案) 10个月前关闭。 问题答案: 您定义的实际上不是构造函数,而是称为的方法。如果您将代码更改为如下所示,则可以正常运行: 如果未明确定义任何特定的构造函数,则编译器会自动创建一个无参数的构造函数。

  • 问题内容: 在浏览一些旧代码时,我遇到了这个宝石: 第二行在Eclipse中被标记为无效代码,我知道为什么。似乎没有明确抛出任何异常,并且构造函数不可能抛出任何类型的异常(例如)。 我的问题是 为什么 要进行空检查?以前在Java的旧版本中,构造函数是否可以返回null?还是这仅仅是毫无用处的代码? 问题答案: 该代码在任何Java版本中均无效。构造函数不可能返回,即使构造函数会抛出异常,也不会调

  • 问题内容: 我正在使用,并且尝试在方法中获取经过 身份验证的 用户,因此可以按分配的公司过滤用户,如下所示: 但是,这不会返回用户。我什至尝试过,但不起作用。 如果我移动了的方法,那么这种工作方式如下: 但是,如果我也把它放在construct方法中,这将 失败! 有什么想法为什么会失败吗? 问题答案: docs 您无法在控制器的构造函数中访问会话或经过身份验证的用户,因为中间件尚未运行。 或者,