【发布时间】:2014-06-04 17:28:49
【问题描述】:
我有一堂课:
class Test
{
public $AppCount;
public $Apps;
// When $AppCount is accessed I want to return count( $this->Apps )
}
当我访问属性$AppCount时,我想返回count( $this->Apps )。
我可以使用像 C# 和 Java 那样的 getter 函数,而不是必须为这个属性声明一个公开函数并将其设为私有吗?
显然__get 在这种情况下不是我想要的,因为该属性确实已经存在。
对于cmets
我有这个,但当我尝试访问该属性时它不运行该功能:
class ProjectSettingsViewModel
{
public $ProjectAppCount = 0;
public $ProjectApps = array();
public function __get( $property )
{
switch( $property )
{
case "ProjectAppCount":
return count( $this->ProjectApps );
break;
}
}
}
如果代码看起来没问题,那一定是其他地方出了问题。
【问题讨论】:
-
您可以将
__get与存在的属性一起使用 -
您可以为此使用神奇的
__get方法,但请创建一个Test::getCount()方法。它被称为 make 是有原因的 -
1) 如果你把它设为
private/protected,它就可以工作。 2)如果你以任何方式计算,该属性是无用的 3)但又一次。 Staph 在你的代码中使用魔法。 -
我发布了答案,但我第二次@PeeHaa .. 在你的代码中使用魔法很危险。
-
是的......就像我说的。他是对的。感谢@PeeHaa