如何在PHP中使用get_class()和作用域解析运算符


how to use get_class() with scope resolution operator in PHP?

<?php
class X {
    function foo() {
        echo "Class Name:".get_class($this)."<br>"; //it displays Y... :)
        echo get_class($this)::$public_var; //not working
        echo Y::$public_var; //works
        Y::y_method();  //works
        get_class($this)::y_method(); //not working
        $classname = get_class($this);
        $classname::y_method(); // again not working..  :( 
    }
    function bar() {
        $this->foo();
    }
}
class Y extends X {
    public static $public_var = "Variable of Y Class";
    public function y_method()
    {
        echo "Y class method";
    }
}
$y = new Y();
$y->bar();
?>
my only question is how to get access members of y class only with dynamically providing class name without changing current structure.

您要找的是get_called_class()

class X {
    function foo() {
    $that = get_called_class();
        echo $that::$private_var;
        echo $that::y_method();
    }
    function bar() {
        $this->foo();
    }
}
class Y extends X {
    public static $private_var = "Variable of Y Class";
    public function y_method()
    {
        echo "Y class method";
    }
}
$y = new Y();
$y->bar();