首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取实例的静态属性

获取实例的静态属性
EN

Stack Overflow用户
提问于 2011-04-11 15:43:19
回答 8查看 14.8K关注 0票数 19

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

代码语言:javascript
运行
复制
$classvars=get_class_vars(get_class($thing));
$property=$classvars['property'];

听起来有点过火了。我希望

代码语言:javascript
运行
复制
$thing::property

代码语言:javascript
运行
复制
$thing->property

编辑:这是个老问题。在较新的PHP中,有更明显的方法可以做到这一点,请在下面搜索。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-04-11 15:46:07

您需要首先查找类名:

代码语言:javascript
运行
复制
$class = get_class($thing);
$class::$property

当然,$property必须定义为staticpublic

票数 23
EN

Stack Overflow用户

发布于 2014-08-09 02:17:27

从类实例内部可以简单地使用self::...

代码语言:javascript
运行
复制
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"
票数 8
EN

Stack Overflow用户

发布于 2017-12-25 15:13:46

如果你不想

代码语言:javascript
运行
复制
$class = get_class($instance);
$var = $class::$staticvar;

因为您发现它的两行太长,所以可以使用其他选项:

1.写一个吸气器

代码语言:javascript
运行
复制
<?php
class C {
  static $staticvar = "STATIC";
  function getTheStaticVar() {
    return self::$staticvar;
  }
}
$instance = new C();
echo $instance->getTheStaticVar();

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

2.编写一个通用静态吸气器。

代码语言:javascript
运行
复制
<?php
class C {
  static $staticvar = "STATIC";
  function getStatic($staticname) {
    return self::$$staticname;
  }
}
$instance = new C();
echo $instance->getStatic('staticvar');

这将允许您访问任何静态,虽然它仍然有点长-卷。

3.写一个神奇的方法

代码语言:javascript
运行
复制
class C {
  static $staticvar = "STATIC";
  function __get($staticname) {
    return self::$$staticname;
  }
}
$instance = new C();
echo $instance->staticvar;

这一个允许您实例访问任何静态变量,就好像它是对象的局部变量一样,但它可能被认为是一个邪恶的可憎的东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5623846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档