在静态方法中获取类变量

时间:2013-12-05 18:18:49

标签: php oop

我有一个类变量,我需要在没有该类实例的情况下使用它。像

这样的东西
$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也由此类的实例在内部使用。

4 个答案:

答案 0 :(得分:1)

您需要在班级中声明$sizestatic

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是实例成员,则无法通过静态函数获取它。如果你考虑一下,这是有道理的。