我正在写一个我打算只静态调用的类,我注意到了一些我没想到的东西。考虑以下代码。
<?php
class Greeting {
public static $greetingMSG;
public static function setGreeting(string $greeting){
self::$greetingMSG = $greeting;
return new static;
}
public static function greet() {
echo self::$greetingMSG;
}
}
Greeting::greet();
Greeting::setGreeting('Hello World!')->greet();
Greeting::greet();
?>
我原以为第一次和第三次调用Greeting::greet();会给出相同的结果。相反,第二次和第三次调用给出了相同的结果。我知道这一定是因为对类的每次调用Greeting都没有创建类的新实例。reset()我可以通过添加一个方法使该类模仿我所期望的。
<?php
class Greeting {
public static $greetingMSG;
public static function setGreeting(string $greeting){
self::$greetingMSG = $greeting;
return new static;
}
public static function greet() {
echo self::$greetingMSG;
self::reset();
}
private static function reset() {
self::$greetingMSG = '';
}
}
Greeting::greet();
Greeting::setGreeting('Hello World!')->greet();
Greeting::greet();
?>
这表现得像我所期待的“Hello World!” 只输出一次。关于这里发生的事情是否有更技术性的解释,该reset()方法是模仿我所期望的最佳方法吗?
有只小跳蛙
梦里花落0921
芜湖不芜
随时随地看视频慕课网APP