Если у меня есть экземпляр в PHP, то какой самый простой способ получить статическое свойство («переменная класса») этого экземпляра?
Эта
$classvars=get_class_vars(get_class($thing)); $property=$classvars['property'];
Звук действительно преувеличен. Я бы ожидал
$thing::property
или
$thing->property
Сначала вам нужно найти имя класса:
$class = get_class($thing); $class::$property
$ property должен быть определен как static
и public
конечно.
Изнутри экземпляра класса вы можете просто использовать 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"
Вы T_PAAMAYIM_NEKUDOTAYIM
доступ к ним, используя двойной двоеточие (или маркер T_PAAMAYIM_NEKUDOTAYIM
если хотите)
class X { public static $var = 13; } echo X::$var;
Здесь также поддерживаются переменные переменные :
$class = 'X'; echo $class::$var;
classname::property;
Я думаю, что все.
Вы должны понимать, что означает статическое свойство. Статическое свойство или метод не для объектов. Они непосредственно используются классом.
вы можете получить к ним доступ
Class_name::static_property_name
В наши дни существует довольно простой и чистый способ сделать это.
<?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
Вы также можете сделать это с помощью свойства в PHP 7.
<?php namespace Foo; class Bar { public static $baz=1; public $class=self::class; //... } $bar = new Bar(); echo $bar->class::$baz; // returns 1
Если вы не хотите
$class = get_class($instance); $var = $class::$staticvar;
потому что вы слишком долго находите две строки, у вас есть другие доступные опции:
<?php class C { static $staticvar = "STATIC"; function getTheStaticVar() { return self::$staticvar; } } $instance = new C(); echo $instance->getTheStaticVar();
Простой и элегантный, но вам нужно написать getter для каждой статической переменной, к которой вы обращаетесь.
<?php class C { static $staticvar = "STATIC"; function getStatic($staticname) { return self::$$staticname; } } $instance = new C(); echo $instance->getStatic('staticvar');
Это позволит вам получить доступ к любому статическому, хотя он все еще немного длинный.
class C { static $staticvar = "STATIC"; function __get($staticname) { return self::$$staticname; } } $instance = new C(); echo $instance->staticvar;
Это позволяет вам получить доступ к любой статической переменной, как если бы это была локальная переменная объекта, но она может считаться нечестивой мерзостью.
class testClass { public static $property = "property value"; public static $property2 = "property value 2"; } echo testClass::$property; echo testClass::property2;