获取实例的静态属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取实例的静态属性相关的知识,希望对你有一定的参考价值。

如果我在php中有一个实例,那么获取该实例的静态属性('类变量')的最简单方法是什么?

这个

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

声音真的太过分了。我期待

$thing::property

要么

$thing->property
答案

您需要先查找类名:

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

当然,$ property必须定义为staticpublic

另一答案

从类实例中,您可以简单地使用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"
另一答案
classname::property;

我想就是这样。

另一答案

您可以使用双冒号(或者如果您愿意,可以使用T_PAAMAYIM_NEKUDOTAYIM token)访问它们

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

这里也支持Variable variables

$class = 'X';
echo $class::$var;
另一答案

您应该了解静态属性的含义。静态属性或方法不适用于对象。它们直接由班级使用。

你可以通过它访问它们

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. Write a getter

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

简单而优雅,但您必须为您正在访问的每个静态变量编写一个getter。

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');

这将让你访问任何静态,虽然它仍然有点啰嗦。

3. Write a magic method

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;

以上是关于获取实例的静态属性的主要内容,如果未能解决你的问题,请参考以下文章

片段必须是公共静态类才能从实例状态正确重新创建

php静态属性

JAVA-封装-静态属性

Python高级语法-对象实例对象属性-类与实例,class方法静态方法等(4.6.1)

片段之间的静态 ArrayList

Java对象初始化顺序