我有一个类,它有一个特定的属性,我需要在没有和有类实例化的情况下访问。
在阅读了互联网之后,我觉得自己很聪明,并将其声明为公共静态,瞧,我能够使用::访问值,而无需实际创建该类的对象。
现在,几个小时后,我需要访问相同的值,但这次是在循环一个数组的过程中,这个数组包含了类的实际实例,我无法访问它....
请通知
Class Omega{
public static $value = 500;
}
$name = "Omega";
$prop = "value";
$cost = $name::$$prop // 500 yay it works
$omega = new Omega();
$ships[] = $omega;
$totalCost = 0;
for ($i = 0; $i < sizeof($ships); $i++){
$totalCost = $totalCost + $ships[i$]->value; // UGH
}
我收到以下通知:
注意:访问静态属性Omega::$value为非静态在C:'xampp'htdocs'fire'test.php第44行
和
注意:未定义的属性:Omega::$value在C:'xampp'htdocs'fire'test.php第44行
value
仍然是类的一部分,因为它是一个静态属性。您可以通过$ships[$i]::$value
访问它。
这不是静态属性的正确使用,因为只有一个实例存在,所以每个$ships[$i]::$value
具有完全相同的值。
代码错误:Class Omega(){
=> class Omega {
, $ships[i$]->value
=> $ships[$i]::$value
考虑一下:
class Omega {
public static $value = 500;
}
$arr = [new Omega(), new Omega()];
echo $arr[0]::$value . "'n";
echo $arr[1]::$value . "'n";
$arr[0]::$value = 400;
echo $arr[0]::$value . "'n";
echo $arr[1]::$value . "'n";
输出:
500
500
400
400
注意,你想做的是通过construct和__toString方法完成的。静态方法无需在类外部实例化即可调用。
如果你想完成你的任务,尝试__toString()方法有这个