Get a static property of an instance

爷,独闯天下 提交于 2019-12-08 14:41:34

问题


If I have an instance in PHP, what's the easiest way to get to a static property ('class variable') of that instance ?

This

$classvars=get_class_vars(get_class($thing));
$property=$classvars['property'];

Sound really overdone. I would expect

$thing::property

or

$thing->property

EDIT: this is an old question. There are more obvious ways to do this in newer PHP, search below.


回答1:


You need to lookup the class name first:

$class = get_class($thing);
$class::$property

$property must be defined as static and public of course.




回答2:


From inside a class instance you can simply use self::...

class Person {
  public static $name = 'Joe';
  public function iam() {
    echo 'My name is ' . self::$name;
  }
}

$me = new Person();
$me->iam(); // displays "My name is Joe"



回答3:


classname::property;

I think that's it.




回答4:


You access them using the double colon (or the T_PAAMAYIM_NEKUDOTAYIM token if you prefer)

class X {
    public static $var = 13;
}
echo X::$var;

Variable variables are supported here, too:

$class = 'X';
echo $class::$var;



回答5:


You should understand what the static property means. Static property or method is not for the objects. They are directly used by the class.

you can access them by

Class_name::static_property_name



回答6:


These days, there is a pretty simple, clean way to do this.

<?php
namespace Foo;
class Bar
{
    public static $baz=1;
    //...

    public function __toString()
    {
        return self::class;
    }

}

echo Bar::$baz; // returns 1
$bar = new Bar();
echo $bar::$baz; // returns 1

You can also do this with a property in PHP 7.

<?php
namespace Foo;
class Bar
{
    public static $baz=1;
    public $class=self::class;
    //...

}

$bar = new Bar();
echo $bar->class::$baz; // returns 1



回答7:


If you'd rather not

$class = get_class($instance);
$var = $class::$staticvar;

because you find its two lines too long, you have other options available:

1. Write a getter

<?php
class C {
  static $staticvar = "STATIC";
  function getTheStaticVar() {
    return self::$staticvar;
  }
}
$instance = new C();
echo $instance->getTheStaticVar();

Simple and elegant, but you'd have to write a getter for every static variable you're accessing.

2. Write a universal static-getter

<?php
class C {
  static $staticvar = "STATIC";
  function getStatic($staticname) {
    return self::$$staticname;
  }
}
$instance = new C();
echo $instance->getStatic('staticvar');

This will let you access any static, though it's still a bit long-winded.

3. Write a magic method

class C {
  static $staticvar = "STATIC";
  function __get($staticname) {
    return self::$$staticname;
  }
}
$instance = new C();
echo $instance->staticvar;

This one allows you instanced access to any static variable as if it were a local variable of the object, but it may be considered an unholy abomination.




回答8:


class testClass {
    public static $property = "property value";
    public static $property2 = "property value 2";
}
echo testClass::$property;
echo testClass::property2;


来源:https://stackoverflow.com/questions/5623846/get-a-static-property-of-an-instance

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!