在PHP中,StdClass的值是否是另一个键的值?

时间:2018-06-15 21:32:29

标签: php

不确定如何说出这个问题。

是否可以创建一个新的StdClass并将一个值作为另一个键(属性)的值?

没有上课

$myObject = (object) [
  'base_url' => 'http://www.google.com/',
  'route'    => $this->base_url . '/some/deeper/path'
];

我知道这段代码不正确,但专注于替换$this只是为了获得概念。

这甚至可能吗?

2 个答案:

答案 0 :(得分:1)

问题是你的数组创建是一步完成的,而base_url的源代码还不存在,只需要作为单独的动作,你需要设置为:)

$myObject = new stdClass();
$myObject->base_url = 'http://www.google.com';
$myObject->route = $myObject->base_url . '/some/deeper/path';

编辑:您可以在一个班轮中间使用可变任务......

$myObject = (object) [
  'base_url' => $base_url = 'http://www.google.com/',
  'route'    => $base_url . '/some/deeper/path'
];
//unset( $base_url );

因为$base_url = 'http://www.google.com/'的操作在对象创建之前首先发生,因此进行了两步处理。

答案 1 :(得分:0)

您可以使用魔术__get方法创建动态PHP属性。例如:

<?php
class MyClass {
    public $base_url = 'http://www.google.com/';

    public function __get($name) {
        if ($name == 'route') {
            return rtrim($this->base_url,'/') . '/some/deeper/path';
        }

        throw new \Exception("Property '$name' is not set");
    }
}

stdClass上执行此操作,您可以将其子类化。但是stdClass就像最初的基类一样。