我有一个具有某种属性的类,我需要在没有类实例化的情况下访问它们 我觉得很聪明,并在阅读互联网后将其宣布为公共静态,我可以使用::访问该值,而无需实际创建该类的对象。
现在,在接下来的几个小时里我需要访问相同的值,但是这次循环遍历一个包含类的实际实例的数组并且我无法访问它....
请告知
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
}
我收到以下通知:
注意:在第44行的C:\ xampp \ htdocs \ fire \ test.php中访问静态属性Omega :: $ value为非静态
和
注意:未定义的属性:第44行的C:\ xampp \ htdocs \ fire \ test.php中的Omega :: $值
答案 0 :(得分:1)
value
仍然是该课程的一部分,因为它是一个静态属性。您可以使用$ships[$i]::$value
访问它。
答案 1 :(得分:1)
这不是正确使用静态属性,因为只存在一个实例,因此每个$ships[$i]::$value
具有完全相同的值。
代码错误:Class Omega(){
=&gt; class Omega {
,$ships[i$]->value
=&gt; $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
答案 2 :(得分:0)
注意,您要执行的操作是由construct和__toString方法完成的。调用静态方法而不在类外实例化。
如果您希望完成任务,请尝试__toString()mehtod以获得此任务