【问题标题】:Public variable not changed for class child function [closed]类子函数的公共变量未更改[关闭]
【发布时间】:2017-02-08 12:56:36
【问题描述】:

参加这门课:

class A{
  public $test = '';

  public function B($param){
    $this->test = 'hello';
    echo $param;
  }

  public function C(){
    return "C() contains:" . $this->test;
  }
}

如果我这样称呼它,将 C 的输出传递给 B:

$obj = new A;
$obj->B($obj->C());

我得到这个输出:

C() contains:

我希望它打印在下面,因为 B 已经将 $test 设置为 hello:

C() contains:hello

为什么在B() 中设置对象的公共$test 变量不会改变子函数调用C() 获得的值?他们不是都访问同一个$obj->test 变量吗?

【问题讨论】:

  • 请注意,C 被调用之前 B,所以值在最后被设置。
  • C 如何将值返回给B 之前 B 设置值...? 认知失调加剧
  • 我的糟糕,糟糕的早晨。谢谢。
  • 我还以为今天早上过得不好……
  • @deceze :) 你认为你可以取消保留吗?因为我确实提出了期望的和实际的行为。我认为这可能是一个被其他人看到的有效陷阱。因为如果可以的话,我仍然会对任何使之成为可能的方式感兴趣。有点谜。

标签: php variables scope


【解决方案1】:

如果您首先调用类AC 方法,该方法返回C() contains:,现在您在方法B 中将此作为$param 传递,现在$test 具有值hello,但您只是回应$paramC() contains: 所以它只会打印 C() contains: 来打印你想要的结果到 echo $param, $this->test

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 2014-03-10
    • 2022-06-10
    • 2013-08-21
    • 2013-08-29
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多