19

PHPにインスタンスがある場合、そのインスタンスの静的プロパティ(「クラス変数」)にアクセスする最も簡単な方法は何ですか?

これ

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

本当にやり過ぎだね。私は期待します

$thing::property

また

$thing->property

編集:これは古い質問です。新しいPHPでこれを行うためのより明白な方法があります。以下を検索してください。

4

8 に答える 8

22

最初にクラス名を検索する必要があります。

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

$propertyはもちろんstatic、として定義する必要があります。public

于 2011-04-11T15:46:07.617 に答える
8

クラスインスタンス内から簡単に使用できます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"
于 2014-08-09T02:17:27.783 に答える
2

したくない場合

$class = get_class($instance);
$var = $class::$staticvar;

2 行が長すぎるため、他のオプションを使用できます。

1.ゲッターを書く

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

シンプルでエレガントですが、アクセスする静的変数ごとにゲッターを作成する必要があります。

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;

これにより、あたかもオブジェクトのローカル変数であるかのように、任意の静的変数へのインスタンス化されたアクセスが可能になりますが、これは忌まわしい行為と見なされる可能性があります。

于 2017-12-25T15:13:46.210 に答える
1

二重コロン (または必要に応じてT_PAAMAYIM_NEKUDOTAYIMトークン)を使用してアクセスします。

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

ここでも可変変数がサポートされています。

$class = 'X';
echo $class::$var;
于 2011-04-11T15:45:14.477 に答える
1

static プロパティの意味を理解する必要があります。静的プロパティまたはメソッドはオブジェクト用ではありません。それらはクラスによって直接使用されます。

あなたはそれらにアクセスすることができます

Class_name::static_property_name
于 2011-04-11T15:46:53.313 に答える
1
classname::property;

それだけだと思います。

于 2011-04-11T15:45:02.373 に答える
0
class testClass {
    public static $property = "property value";
    public static $property2 = "property value 2";
}
echo testClass::$property;
echo testClass::property2;
于 2011-04-11T15:47:34.177 に答える