代码之家  ›  专栏  ›  技术社区  ›  Taylor A. Leach

在php中,stdclass的值可以是另一个键的值吗?

php
  •  0
  • Taylor A. Leach  · 技术社区  · 6 年前

    不知道该怎么回答这个问题。

    是否可以创建一个新的stdclass并使一个值成为另一个键(属性)的值?

    一节课都不辛辣

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

    我知道这个代码是不正确的,但重点是替换 $this 只是为了让大家了解这个概念。

    这可能吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   jibsteroos    6 年前

    问题是数组的创建是作为一个单独的步骤完成的,并且基本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/' 在对象创建之前首先发生,因此执行两步过程。

        2
  •  0
  •   Roger Gee    6 年前

    可以使用magic创建动态php属性 __get 方法。例如:

    <?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 你可以把它分类。然而 STD类 就像一个初始基类。