【发布时间】:2019-03-29 06:56:24
【问题描述】:
让我们考虑这段代码
class MyClass {
function __call($method, $arguments) {
// I want to convert the return response from stdClass to SomeClass here and return
}
}
Class UserClass extends Myclass
{
protected function test(): SomeClass
{
$object = new stdClass();
$object->id = 1;
$object->name = 'some';
return $object;
}
}
我正在创建对象并尝试公开调用受保护的函数
$userClass = new UserClass();
$userClass->test();
它将转到__call方法,因为测试方法不公开
function __call($method, $arguments) {
// I want to convert the return response from stdClass to SomeClass here and return
}
这里不是返回 SomeClass 类型的值,而是返回 stdClass 类型的 object。我想在返回并抛出错误之前将此对象转换为 SomeClass 类型。
protected function test(): SomeClass
{
$object = new stdClass();
$object->id = 1;
$object->name = 'some';
return $object;
}
是否可以使用反射方法或其他方法?非常感谢您的建议。
【问题讨论】:
-
对我来说,如果您需要更改函数的返回类型,这表明设计是错误的。
-
同意。使用不同的函数返回不同的类型。或者根本不声明返回类型。
-
嘿@Mohd 你只会让人们说“不要这样做”,除非你更好地解释为什么你需要这样做。您能否详细说明为什么需要这样做?另外,您能否解释一下“我想在返回和抛出错误之前将此数组转换为 SomeClass 类型”的意思。您打算如何进行这种“转换”?如果你能提供更多细节会更好,我想;-)
-
反射用于获取 PHP 函数的信息,它不会改变它们的作用。
-
@AdamCameron 感谢您的重播。我正在为此研究一些替代方法。我的要求是,我有一个没有 PHP 语法的 php 文件,我必须生成它的 PHP 等效类文件并在通过它时验证数据及其类型。就像 typescript 中的接口或 C 中的结构一样。不知道是否我会成功与否。不过我最近有了一些进展,让我们看看进展如何……