能够在有或没有类实例化的情况下访问属性


Being able to access a property with and without class instantiation?

我有一个类,它有一个特定的属性,我需要在没有和有类实例化的情况下访问。
在阅读了互联网之后,我觉得自己很聪明,并将其声明为公共静态,瞧,我能够使用::访问值,而无需实际创建该类的对象。

现在,几个小时后,我需要访问相同的值,但这次是在循环一个数组的过程中,这个数组包含了类的实际实例,我无法访问它....

请通知

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()方法有这个

相关文章: