0

変数への参照が開始された (そして現在存在している) クラスを特定するにはどうすればよいですか?

例:

<?php
    class MyClass {
        public $array = array(
            "this",
            "is",
            "an",
            "array"
        );
    }
    
    $class = new MyClass();
    $arrayReference = &$class->array;
    GetClassForVariable($arrayReference); //Should return "MyClass"
?>

私の最善の策はある種のReflectionですが、これに適していると思われる関数は見つかりませんでした。

編集:

私が望むものにより適した例は次のとおりです。

<?php
    class API_Module {
        public $module;
        public $name;
        private $methods = array();
        public function __construct($module, $name) {   
            $this->module = $module;
            $this->name = $name;
            $this->methods["login"] = new API_Method($this, "login", "Login");
        }
        public function GetMethod($method) {
            return $this->methods[$method];
        }
        public function GetURL() {
            return $this->module; //Should return "session"
        }
    }
    class API_Method {
        public $method;
        public $name;
        private $parentReference;
        private $variables = array();
        public function __construct(&$parentReference, $method, $name) {
            $this->parentReference = $parentReference;
            $this->method = $method;
            $this->name = $name;
            $this->variables["myvar"] = new API_Variable($this, "myvar");
        }
        public function GetURL() {
            return $this->GetParentURL() . "/" . $this->method; //Should return "session/login"
        }
        public function GetVariable($variableName) {
            return $this->variables[$variableName];
        }
        private function GetParentURL() {
            // Need to reference the class parent here
            return $this->parentReference->GetURL();
        }
    }
    class API_Variable {
        public $name;
        private $parentReference;
        public function __construct(&$parentReference, $name) {
            $this->parentReference = $parentReference;
            $this->name = $name;
        }
        public function GetURL() {
            return $this->GetParentURL() . "/" . $this->name; //Should return "session/login/myvar"
        }
        private function GetParentURL() {
            // Need to reference the class parent here
            return $this->parentReference->GetURL();
        }
    }
    
    $sessionModule = new API_Module("session", "Session");
    var_dump($sessionModule->GetMethod("login")->GetVariable("myvar")->GetURL()); //Should return "session/login/myvar"
?>

これで問題なく動作しますが、すべてのサブ変数を使用せずにこれを実行できるようにしたいと考えています。$parentReference無理かもしれませんが、出来るかどうか知りたいです。

4

2 に答える 2

1

あなたの例:

$class = new MyClass();
$arrayReference = &$class->array;
GetClassForVariable($arrayReference); //Should return "MyClass"

$arrayReferencePHP では、エイリアスが元々参照している変数を見つけることはできません。エイリアスを解決する機能はありません。

さらに$class->array、それ自体は単なる変数です。そのため、それが定義されたクラスのに基づいて調べる必要もあります。PHP が変数のエイリアスを解決する機能を提供しないのと同様に、変数の定義について学習する機能も提供しません。

要するに、PHPにはReflectionVariable利用可能なクラスがありません;)それが可能かどうかさえ疑問です。

于 2013-03-20T10:03:56.063 に答える
0

get_class()関数は機能するはずです:

http://php.net/manual/en/function.get-class.php

インスタンス化されたオブジェクトのプロパティの親クラスを取得する必要がないというGRoNGoRに同意します。代わりに、プロパティにアクセスする前にクラスの名前を取得することもできます。例えば:

$class = new MyClass();
$parent_class = get_class($class); // returns "MyClass"
$arrayReference = &$class->array;

オブジェクトインスタンスがあり、そこから親クラスを簡単に取得できるのに、なぜプロパティの親クラスが必要になるのかわかりません。

于 2013-02-19T10:14:35.603 に答える