【发布时间】:2020-12-10 08:20:45
【问题描述】:
我在一个变量中设置了一个类和参数,如下所示:
$myVar = '\Api\MyClass(\DateTimeInterface::RFC3339_EXTENDED)';
我需要为这个变量创建一个new。
我尝试了多种解决方案,最后解决了 Class 的 new 但我无法通过参数。
我的代码是:
<?php
$myVar = '\Api\MyClass(\DateTimeInterface::RFC3339_EXTENDED)';
$className = substr($myVar, 0, strpos($myVar, "(")); // $className will be: \Api\MyClass
if (class_exists($className)) {
preg_match('/\((.*?)\)/', $myVar, $classArguments); $classArguments will be: \DateTimeInterface::RFC3339_EXTENDED
$obj = new $className($classArguments[1]); // it doesn't work
}
问题是$classArguments[1] 作为string 传递给我的班级。下面的区别:
// It works
$p = \DateTimeInterface::RFC3339_EXTENDED;
var_dump($p);
// and return
string(15) "Y-m-d\TH:i:s.vP"
// It doesn't work
$p = "\DateTimeInterface::RFC3339_EXTENDED";
var_dump($p);
// return
string(36) "\DateTimeInterface::RFC3339_EXTENDED"
你能帮帮我吗?
谢谢。
【问题讨论】:
-
我能问一下你的用例吗?我想不出任何有效的用例可能最终得到这种字符串。