2

これが可能かどうか疑問に思っていましたが、それを行う方法が見つからなかったので、質問します。クラスのインスタンスに存在する変数の名前を取得するにはどうすればよいですか。

擬似コード:

class test{

    public $my_var_name = '';

    function __construct(){

        //the object says: Humm I am wondering what's the variable name I am stored in?
        $this->my_var_name = get_varname_of_current_object();

    }

}

$instance1 = new test();
$instance2 = new test();
$boeh = new test();

echo $instance1->my_var_name . ' ';
echo $instance2->my_var_name . ' ';
echo $boeh->my_var_name . ' ';

出力は次のようになります。

instance1 instance2 boeh

どうして!まあ、私はその可能性を知りたいだけです。

4

3 に答える 3

7

理由はわかりませんが、どうぞ。

<?php
class Foo {
    public function getAssignedVariable() {

        $hash = function($object) {
            return spl_object_hash($object);
        };

        $self = $hash($this);

        foreach ($GLOBALS as $key => $value) {
            if ($value instanceof Foo && $self == $hash($value)) {
                return $key;
            }
        }
    }
}

$a = new Foo;
$b = new Foo;

echo '$' . $a->getAssignedVariable(), PHP_EOL;  // $a
echo '$' . $b->getAssignedVariable(), PHP_EOL;  // $b
于 2013-10-02T11:53:47.027 に答える
3

PHPでクラス内の初期化子変数の名前を取得する方法に答えようとして、このコードを作成しました

しかし、それはすでに閉じられており、この質問を参照しています。

読みやすいもう 1 つのバリアントです。php 開発の基本的な概念を壊していないことを願っています。

class Example
{
   public function someMethod()
   {

    $vars = $GLOBALS;
    $vname = FALSE;
    $ref = &$this;
    foreach($vars as $key => $val) {
        if( ($val) === ($ref)) {
            $vname = $key;
            break;
        } 
    }

    return $vname;
   }

}

$abc= new Example;
$def= new Example;
echo $abc->someMethod(); 
echo $def->someMethod();
于 2015-01-09T01:33:19.177 に答える
0

そうする正当な理由が見つかりません。

とにかく、あなたができる1つの方法(しかし、私が想像できる限りは役に立たない)これは、次のようにインスタンス名をコンストラクタのパラメータとして渡すことです:

$my_instance = new test("my_instance");
于 2013-10-02T11:49:49.027 に答える