我不知道该如何表达这个问题。
是否可以创建一个新的StdClass,并将一个值作为另一个键(属性)的值?
不创建类的
$myObject = (object) [
'base_url' => 'http://www.google.com/',
'route' => $this->base_url . '/some/deeper/path'
];
我知道这段代码是不正确的,但是专注于替换$this
只是为了让人们理解这个概念。
这有可能吗?
发布于 2018-06-16 05:45:11
问题是您的数组创建是作为单个步骤完成的,并且base_url的源代码还不存在,只作为单独的操作,您需要设置为get :)
$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/'
的操作首先发生在对象创建之前,因此需要两个步骤的过程。
发布于 2018-06-16 05:40:41
您可以使用神奇的__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
就像一个初始基类。
https://stackoverflow.com/questions/50882918
复制相似问题