不确定如何说出这个问题。
是否可以创建一个新的StdClass并将一个值作为另一个键(属性)的值?
没有上课
$myObject = (object) [
'base_url' => 'http://www.google.com/',
'route' => $this->base_url . '/some/deeper/path'
];
我知道这段代码不正确,但专注于替换$this
只是为了获得概念。
这甚至可能吗?
答案 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
就像最初的基类一样。