0
<?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.
hakre
  • 193,403
  • 52
  • 435
  • 836
hardik
  • 9,141
  • 7
  • 32
  • 48
  • 1
    get_class() will always return X. $this is not set in a static function. enable errors and read the log to learn. you might be looking for `get_called_class()` instead. – hakre Jul 18 '11 at 09:27
  • possible duplicate of [How do I call a static child function from parent static function ?](http://stackoverflow.com/questions/6678466/how-do-i-call-a-static-child-function-from-parent-static-function) – hakre Jul 18 '11 at 09:28
  • 1
    Thanx binaryLV i have changed variable name. – hardik Jul 18 '11 at 10:10
  • hakre - > get_class() is returning class name Y, pls check your self – hardik Jul 18 '11 at 10:28

1 Answers1

4

You are looking for 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();
Stoosh
  • 2,408
  • 2
  • 18
  • 24