Intereting Posts
Symfony2: Чтение файлов cookie Magento перенаправляет с сайта adminthtml на действие frontend CodeIgniter: Создать нового помощника? Отражает ли идея идеи частных методов, потому что частные методы могут быть доступны за пределами класса? ZendDebugger не может открыть libssl.so.0.9.8 в Mint 12 Разделить массив дат в зависимости от месяца или года WooCommerce: автоматическое завершение оплаченных заказов (в зависимости от способов оплаты) Facebook getAccessToken () возвращает токен доступа к приложениям: работает отлично на одном сервере, но бросает токен доступа к приложениям в другом. как я могу указать PHP glob на конкретный каталог? Почему PHP OCI8 / Oracle oci_bind_array_by_name не работает для меня? как создать веб-службу php, которая принимает строку и выполняет операции с базой данных PHP: Что такое языковые конструкции и зачем они нам нужны? Как отправить динамические данные из одной активности в другую в android API на основе IP-адреса пользователя Zend_Db без Zend Framework

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

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

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

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; 

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

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