2 回答
TA贡献1772条经验 获得超6个赞
我知道这一定是因为对类的每次调用greeting都没有创建类的新实例
我认为你对这里的一些基本原理有一个基本的误解。
这与是否$greetingMSG静态无关。一旦你设置了一个类成员变量,它的值将保持不变,直到你改变它。所有后续调用回显该变量将继续回显您之前已经设置的值。无论它是否是静态的,这将表现相同。
是的,如果你愿意,你可以有一个重置方法来清除值,而且你实际上只是在做与setGreeting('');.
无论如何,我不确定这个类充满静态方法的目的是什么,或者为什么你会有一个私有的重置方法。在我看来,这不是一个精心设计的课程。
为什么不只是一个没有静态方法的普通类?它会更灵活,更有意义。这是一堆用法的示例:
$greeting = new Greeting('Hello World!');
$greeting->greet();
$greeting->setMessage('Goodbye World!');
$greeting->greet();
$greeting->greet();
$greeting2 = new Greeting();
$greeting2->setMessage('Finished');
$greeting2->greet();
$greeting->greet();
这按以下顺序打印:
Hello World!
Goodbye World!
Goodbye World!
Finished
Goodbye World!
对此有几点需要注意:
通过这种方式,您可以拥有多个带有不同消息的问候语实例。
我们可以从我的代码中推断出
Greeting
该类有一个构造函数,它允许您在创建实例时设置消息,或者您可以创建一个空白并稍后使用setMessage()
.为了说明变量的值在您更改它之前如何保持不变,请注意,在我们创建第二个
Greeting
实例之后,回显第一个Greeting
对象的消息仍然会给出与之前相同的值,因为它仍然没有被更改。
TA贡献1796条经验 获得超7个赞
$greetingMSG 属性是静态的,这意味着它的内容与所有 greeting 类的实例共享。让我们通过步骤:
第一步:
greeting::greet();
这将输出一个空字符串,对吧?因为尚未定义 $greetingMSG 值。
第二步:
greeting::setGreeting('Hello World!')->greet();
在这一步中,您为 $greetingMSG 静态属性定义一个值,打印它并再次定义一个空字符串作为它的值。也就是说,输出将是“Hello, World!”。
第三步:
greeting::greet();
最后,这将再次输出一个空字符串,因为您刚刚定义 $greetingMSG 又是一个空字符串。
- 2 回答
- 0 关注
- 171 浏览
添加回答
举报