我使用了搜索功能,但我无法找到问题的答案,所以这里是:
我正在建造一个小游戏。这场比赛是关于星舰相互射击的。每个Starship都是一个具有继承点值的类,如此class Ship {
$public value;
function __construct($value){
$this->value = $value;
}
}
$value
需要多次,一旦服务器解决了游戏玩法并且每个Ship都已正确实例化($ship->value
)
然而,偶尔我也需要各种船只的价值,而不是先实例化它们。
这是我的问题。我知道我可以通过使它们静态(Ship::$value
)来访问没有实例化的道具,但是通过这样做,我不再能够从类内部访问它(“访问静态道具和非静态”)< / p>
我的问题是:使用$ value属性设置我的类的最佳方法是什么,以便我可以尽可能普遍地访问它,即有和没有实例化类?
答案 0 :(得分:2)
我知道我可以通过使它们静态化(Ship :: $ value)来访问没有实例化的道具,但是通过这样做,我不再能够从类内部访问它(&#34;访问静态道具,如同非静态&#34)
您仍然可以从类中访问静态属性。
您所要做的就是像self::$value
而不是$this->value
一样打电话给他们。
答案 1 :(得分:2)
我知道我可以通过使其静态化(Ship :: $ value)来访问没有实例化的道具,但是通过这样做,我无法再从类内部访问它。
静态属性类似于全局变量。当您更改它时,它会更改该类的所有对象,因为它只有一个实例。它不依赖于实例的存在,因为它是一个全局变量,可能只限于其类的对象。
object属性是类的每个实例的属性。在创建包含它的对象(类的实例)之前,不能使用它(get或set)。它不是单独存在的。
$ value需要多次,一旦服务器解决了游戏玩法并且每个Ship都被正确实例化($ ship-&gt; value),那么偶尔我也需要各种船只的价值而不需要先实例化它们。
你是什么意思“需要各种船只的价值而不实例化它们”?
如果船舶不存在,又如何定义其价值?
我猜你的意思是所有船只的默认值。或者,也许,您有船型,每种类型都有不同的值(但所有相同类型的船具有相同的值)。
这可以通过定义一个(或多个)类变量(或常量)来轻松实现,这些变量存储所有船舶(或某种类型的所有船舶)的默认值。
class Ship {
protected static $defaultValue = 42;
public $value;
public function __construct($value){
$this->value = $value;
}
public static function getDefaultValue()
{
return self::$defaultValue;
}
}
// Use the default value (it's a class property, it always exists)
echo(Ship::getDefaultValue()); // 42
// Instantiate a ship, set a custom value to it
$ship = new Ship(51);
// Use its value
echo($ship->value); // 51
// You can also access the class property $defaultValue using an instance
echo($ship->getDefaultValue()); // 42