【问题标题】:PHP 7 : Is there a possibility to change return data of function dynamically using reflection class or reflection methodPHP 7:是否有可能使用反射类或反射方法动态更改函数的返回数据
【发布时间】: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 中的结构一样。不知道是否我会成功与否。不过我最近有了一些进展,让我们看看进展如何……

标签: php oop php-7


【解决方案1】:

我强烈建议其他人发布的内容。 如果您有两种不同的情况,则应该有两个不同的函数处理返回值。每个以返回一种或另一种类型时命名,即: getUserArraygetUser(如果不在一个类中)

还有另一种方法: 在SomeClass 中实现方法toArray,它将对象作为数组而不是self 返回。那么你也清楚数组来自哪里以及它应该遵循哪种结构。我建议尽可能保留 ValueObject 而不是数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多