我有一个类变量,我需要在没有该类实例的情况下使用它。像
这样的东西$size = Image::getSize('original');
这是我的尝试,但getSize返回null。
class Image extends Model {
protected $sizes =
['original'=>['w'=>'2048','h'=>'1536','f'=>'1'],
'originalSquare'=>['w'=>'2048','h'=>'1536','f'=>'1'],
'thumb'=>['w'=>'120','h'=>'120','f'=>'1'],
'overview'=>['w'=>'554','h'=>'415','f'=>'3'],
'category'=>['w'=>'260','h'=>'195','f'=>'2'],
'medium'=>['w'=>'554','h'=>'415','f'=>'1']];
public static function getSize($size)
{
return(self::$sizes[$size]);
}
}
有没有更好的方法来实现这一目标? $ sizes也由此类的实例在内部使用。
答案 0 :(得分:1)
您需要在班级中声明$size
为static
:
class Image extends Model {
protected static $sizes = array(
'original' => array('w' => '2048', 'h' => '1536', 'f' => '1')
);
public static function getSize($size) {
return self::$sizes[$size];
}
};
答案 1 :(得分:0)
你想让它成为一个静态变量来解除它与需要一个类实例的关联。
答案 2 :(得分:0)
您必须使用受保护的静态(!!)$ sizes [...]因为没有静态,您无法在静态函数afaik中访问此属性。如果你想访问它,你必须使用$ this而不是self 但是你仍然可以访问类中的静态属性。
答案 3 :(得分:0)
静态函数无法访问实例字段或方法。
如果$size
是实例成员,则无法通过静态函数获取它。如果你考虑一下,这是有道理的。