【问题标题】:PHP get object from array while creating objectPHP在创建对象时从数组中获取对象
【发布时间】:2020-10-22 07:31:47
【问题描述】:

使用此代码:

$notis = [
    new InternalNotification([
       $this->receiver()->associate(User::first()->id),
        'product_id'        => 1,
        'notification_id'   => 1,
        'is_read'           => false,
    ]),
];

如何确保在第 3 行 ($this->) 上获取 InternalNotification 的当前实例?

【问题讨论】:

  • 你不能。 $this 指的是其方法包含该代码的对象。
  • 问题没有意义,您的阵列看起来有点时髦。它是关联的还是数字的?如果您想要对 InternalNotification 的引用,请将其分配给 var,$this 在方法内部工作,而不是在构造函数的参数内部工作。
  • 您不能在发送给构造函数的参数中引用新实例,因为参数是在调用函数之前进行评估的。

标签: php arrays object


【解决方案1】:

如果我对问题的理解正确,答案是“你不能”,原因很基本:它还不存在。

PHP(和大多数语言)中的表达式是从内到外评估的 - 举一个简单的例子,var_dump(foo()); 必须运行函数 foo() 才能转储其输出。

所以你的代码等价于:

$a = User::first()->id;
$b = $this->receiver()->associate($a);
$notis = [
    new InternalNotification([
        $b,
        'product_id'        => 1,
        'notification_id'   => 1,
        'is_read'           => false,
    ]),
];

$b 无法预见未来并获取尚不存在的对象。最早可以访问该对象的是它的构造函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2020-01-26
    相关资源
    最近更新 更多