如果我在PHP中有一个实例,那么获得该实例的静态属性('class变量‘)最简单的方法是什么?
这
$classvars=get_class_vars(get_class($thing));
$property=$classvars['property'];听起来有点过火了。我希望
$thing::property或
$thing->property编辑:这是个老问题。在较新的PHP中,有更明显的方法可以做到这一点,请在下面搜索。
发布于 2011-04-11 15:46:07
您需要首先查找类名:
$class = get_class($thing);
$class::$property当然,$property必须定义为static和public。
发布于 2014-08-09 02:17:27
从类实例内部可以简单地使用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"发布于 2017-12-25 15:13:46
如果你不想
$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;这一个允许您实例访问任何静态变量,就好像它是对象的局部变量一样,但它可能被认为是一个邪恶的可憎的东西。
https://stackoverflow.com/questions/5623846
复制相似问题