Получить статическое свойство экземпляра - программирование
Подтвердить что ты не робот

Получить статическое свойство экземпляра

Если у меня есть экземпляр в PHP, какой самый простой способ получить статическое свойство ("переменная класса") этого экземпляра?

это

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

Звук действительно перестарался. Я бы ожидал

$thing::property

или же

$thing->property

РЕДАКТИРОВАТЬ: это старый вопрос. Есть более очевидные способы сделать это в более новом PHP, поиск ниже.

4b9b3361

Ответ 1

Сначала вам нужно найти имя класса:

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

$свойство должно быть определено как static и public, конечно.

Ответ 2

Внутри экземпляра класса вы можете просто использовать 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;

Я думаю, что это так.

Ответ 5

Вы должны понимать, что означает статическое свойство. Статическое свойство или метод не для объектов. Они непосредственно используются классом.

вы можете получить к ним доступ через

Class_name::static_property_name

Ответ 6

В наши дни существует довольно простой и чистый способ сделать это.

<?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

Ответ 7

Если вы предпочитаете не

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

потому что вы слишком долго находите две строки, у вас есть другие доступные опции:

1. Напишите геттер

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

Простая и элегантная, но вам нужно написать getter для каждой статической переменной, к которой вы обращаетесь.

2. Напишите универсальный статический геттер

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

Это позволит вам получить доступ к любому статическому, хотя он все еще немного длинный.

3. Напишите магический метод

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

Это позволяет вам получить доступ к любой статической переменной, как если бы это была локальная переменная объекта, но она может считаться нечестивой мерзостью.

Ответ 8

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