如果我在PHP中有一个实例,那么获取该实例的静态属性("类变量"(的最简单方法是什么?
这个
$classvars=get_class_vars(get_class($thing));
$property=$classvars['property'];
听起来太夸张了。我希望
$thing::property
或
$thing->property
编辑:这是个老问题。在较新版本中,有更明显的方法可以做到这一点PHP,在下面搜索。
您需要首先查找类名:
$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"
如果您不想
$class = get_class($instance);
$var = $class::$staticvar;
因为你发现它的两行太长,你有其他选择:
1.写一个getter
<?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;
这个允许您实例化访问任何静态变量,就好像它是对象的局部变量一样,但它可能被认为是一个邪恶的可憎之物。
classname::property;
我想就是这样。
您可以使用双冒号(如果愿意,也可以使用T_PAAMAYIM_NEKUDOTAYIM
令牌(访问它们
class X {
public static $var = 13;
}
echo X::$var;
这里也支持可变变量:
$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
您也可以使用PHP7中的一个属性来完成此操作。
<?php
namespace Foo;
class Bar
{
public static $baz=1;
public $class=self::class;
//...
}
$bar = new Bar();
echo $bar->class::$baz; // returns 1
class testClass {
public static $property = "property value";
public static $property2 = "property value 2";
}
echo testClass::$property;
echo testClass::property2;