当前位置: 首页 > 知识库问答 >
问题:

用另一个对象的公共变量初始化一个对象

广瑞
2023-03-14

为什么我不能这样做?

<?php

class A {}

class B {

    public $a = new A();
}


我得到:

致命错误:常量表达式包含无效操作

这有什么办法吗?

共有1个答案

张锐藻
2023-03-14

定义属性时不能使用那样的表达式,但可以在构造函数中设置属性:

class B {
    public $a;

    public function __construct()
    {
        $this->a = new A();
    }
}

null

// Create an interface
interface AInterface {
    // add all required method signatures
}

// Make class A implement that interface
class A implements AInterface {
    // implementations of the methods in the interface
}

// Make class B accept the interface in the constructor
class B {
    public $a;

    public function __construct(AInterface $a) {
        $this->a = $a;
    }
}

然后,当您创建类B时,您将传递依赖项:

$b = new B(new A());

这样做的原因是,只要类A实现了相同的接口,您就可以将类A的实现交换给其他类,这样更容易更改实现和模拟您的类(在编写测试等时)。

为了使依赖项的传递不那么麻烦,您可以使用
依赖项注入容器。

 类似资料:
  • 简而言之,我创建了一个类Something witch具有一个带有JFrame的函数,其中我有一个标签和一个按钮。在按钮上有一个addActionListener(new changeLabel())。我在src包中为侦听器类了changeLabel,但当我启动应用程序并单击按钮时,在changeLabel上抛出一个NullPointerException NameLabel.setText(“N

  • 问题内容: 我有类似的东西: 现在,我想用另一个JSON结构值替换“我的英语标题” 。 我尝试了: 但这是行不通的。任何人都可以给我提示如何在JSON变量中获取JSON值? 编辑:这是使用Jquery的上下文菜单,但是我在下面的所有解决方案中都遇到了问题,这是时候传递分隔符的字符串了。它不显示分隔符,因为它将字符串而不是仅字符串传递给对象。 例: 问题答案: 解决您的修改。尝试以下

  • 我有两个Java类,Product和ProductReview。ProductReview除了变量long id和String review外,还有一个名为Product的变量,该变量应包含类Product中的一个对象。例子: Products类有私有变量long id、String name和List评论(它也从Product评论类中获取评论)。产品类与Product评论有一对多的关联,反之亦然

  • 我已经编写了这个预期输出的代码: 输入样本: 输入乘客姓名:Priya 输入性别(M或F/m或f):F 输入年龄:61 请输入票号:140 输入票价:500.0 示例输出1: 票号:143 乘客姓名:Priya 一张票的价格: 500.0 总金额: 375.0 我必须根据我所写函数的年龄和性别来更改总量值。 我的代码: Person.java BusTicket.java TestMain.jav

  • 问题内容: 我总是理解静态变量在被引用时共享一个实例。我想对此进行测试,但结果与我预期的不同。 输出: 柜台:1 测试:0 由于引用我认为,当我增加那么将自动以及递增。但是,似乎是从某处引用,问题是在哪里? 问题答案: 由于引用 这个假设是错误的。在Java中,您不能引用变量。变量中存储的是一个值。该值可以是原始类型值或引用类型值。对于基元,值是基元的值。对于引用类型, 引用值(通常只是引用)是指

  • 问题内容: 我在用Java工作。 我通常会这样设置一些对象: 问题是:在此示例中是否等于,按原样我可以假定对未初始化的对象进行空检查将是准确的? 问题答案: 正确,未显式初始化的引用类型的静态成员和实例成员都由Java 设置为。相同的规则适用于数组成员。 根据Java语言规范的第4.12.5节: 变量的初始值 程序中的每个变量在使用值之前都必须具有一个值: 每个类变量,实例变量或数组组件在创建时均