【问题标题】:PHP Equivalent of Java Type-Casting SolutionJava 类型转换解决方案的 PHP 等价物
【发布时间】:2010-03-07 23:40:33
【问题描述】:

由于 PHP 没有自定义类类型转换,我将如何进行与此 Java 代码等效的 PHP:

CustomBaseObject cusBaseObject = cusBaseObjectDao.readCustomBaseObjectById(id);
((CustomChildObject) cusBaseObject).setChildAttribute1(value1);
((CustomChildObject) cusBaseObject).setChildAttribute2(value2);

就我而言,如果我能做到这一点,那就非常好。但是,在没有类型转换支持的情况下尝试此操作,它会给我一个错误,即该对象的方法不存在。

谢谢,

史蒂夫

【问题讨论】:

  • 是否有可能没有在对象中声明方法?因为如果他们不是,你会得到那个错误....
  • 方法是否在子对象中声明?是的,他们是。我只是无法在这样的 PHP 情况下访问它们,因为它没有预料到子对象的正确类型。因此,它会引发错误。

标签: java php casting


【解决方案1】:

这样做的正确方法是使cusBaseObjectDao::readCustomBaseObjectById() 成为生产适当子代的工厂。之后就不需要强制转换了,因为 PHP 是一种动态语言

【讨论】:

    【解决方案2】:

    在 PHP 中,您只需调用方法。类型是运行时属性:

    $baseObj = $baseObjDao->readById($id);
    $baseObj->setChildAttribute1($value1);
    $baseObj->setChildAttribute2($value2);
    

    Java 是静态(强)类型的。 PHP 是动态(弱)类型的。所以只需调用对象的方法,如果类型不正确,就会产生运行时错误。

    【讨论】:

    • 问题是对于第二行和第三行,基础对象实际上需要是一个子对象。否则,它会说该方法不存在,因为 readById() 方法返回的是基础对象而不是子对象。
    • @stjowa 不确定我是否理解问题所在。 readById() 可以返回 any 类的实例。它不应该返回一种正确的类型(具有这些方法的类型)吗?如果没有,我错过了一些东西。 Java 正在做什么你所期望的?
    • 我不确定在基本 DAO 中包含/耦合与儿童相关的信息是否正确......但是,我想在这种情况下这是我的问题。在 Java 中,我可以通过明确地将其强制转换给孩子来完成类似于我在问题中所写的内容,但这是 PHP 中的一个限制。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多