【问题标题】:PHP error Can't use method return > value in write contextPHP错误不能在写上下文中使用方法返回>值
【发布时间】:2010-01-17 00:22:44
【问题描述】:

我在 PHP 类中遇到此错误...

致命错误:无法使用方法返回 写入上下文中的值 C:\webserver\htdocs\friendproject2\includes\classes\User.class.php 第 35 行

这是麻烦的部分。

if(isset($this->session->get('user_id')) && $this->session->get('user_id') != ''){
    //run code
}

此代码在我的委托人中,如果尚未为 $this->session->get('user_id') 设置值,那么它将返回 false 而不是数字。如您所见,我希望检查此值是否为数字,甚至没有设置。

任何有关修复的帮助表示赞赏。

【问题讨论】:

  • 我已经习惯于从预期返回值的方法返回 null,当没有值存在时,并且只从应该返回指示是否存在的方法返回布尔值(true/false)操作失败/成功。您可能也想考虑使用这种范例。这样做的好处是,特别是当一个方法期望返回一个数字时,你不会将值零误认为是 false。

标签: php class constants isset


【解决方案1】:

您不能将 isset 用于函数的结果。请考虑以下代码:

if( $this->session->get('user_id') ){
    //run code
}

【讨论】:

  • 请记住,如果您的应用程序允许 user_id 的值为 0,这将失败,因为 0 的计算结果为 false。在许多应用程序中,user_id 为 0 的可能性不大,但仍想指出这一点。
  • 嗯,现在我更彻底地阅读了 OP 的问题,我看到他提到如果没有 user_id,该方法将返回 false。不过,也许: if( false !== $this->session->get('user_id') ) ... 可能会更省钱。
【解决方案2】:

isset() 仅适用于变量 通过其他任何东西都会导致 解析错误。用于检查常量 使用defined() 函数设置。

来自PHP Manual

【讨论】:

    【解决方案3】:

    您不能在函数上使用isset。但是,由于 false0'' 都等同于虚假陈述,因此请这样编写测试:

    if( $id = $this->sessions->get('user_id') ){
       // Will only run if $id does not equal '', False, or 0
    }
    

    这样你已经运行了你的测试并且在一个步骤中分配了变量。

    【讨论】:

    • 请注意,关于 if() 中的赋值 - 如果您在 if 中添加第二个条件,很容易感到困惑。 && 运算符优先于赋值,因此if($id = myFunc() && $id > 0) 在逻辑上等同于if($id = (myFunc() && $id > 0)),而您的意思可能是if(($id = myFunc()) && $id > 0)。只是想把它扔出去,因为这是我发现自己不时犯的一个小错误,如果你不知道去寻找它可能很难发现。
    猜你喜欢
    • 2012-08-21
    • 2011-10-12
    • 2012-09-08
    • 2016-08-12
    • 2010-12-04
    • 2015-04-13
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多