使用带有成员名称的字符串变量访问类的成员

Short Version: Why can't we access a function like this:

$b = "simple_print()";
$obj->$b;

Complete Version:

Suppose we have a class User defined like this:

class User {
    public $name;

    function simple_print() {
        echo "Just Printing" . "<br>";
    }
}

Now if a create an User object and set the name of it we can print its name using

$obj = new User;
$obj->name = "John";
echo $obj->name;

Although it is strange we also can do something like this in order to print "John":

$a = "name";
echo $obj->$a;

But we can't access a function using the same idea:

$b = "simple_print()";
$obj->$b;

Why? Shouldn't it work the same way?

Also, does anyone know what is it called? I tried to look for "accessing a member through a variable" and "using a method through a variable with the name of it" but I didn't find anything related to this.

Extra info: The version of PHP I'm using is: PHP version: 5.5.9-1ubuntu4.7

You were very close, but made a small logical mistake. Try this instead:

$b = 'simple_print';
$obj->$b();

This is because the method is accessed by it's name, which is simple_print, not simple_print(). The execution is triggered by the parenthesis, but that is not part of the name, so of how you access the method.

Here is a short example:

<?php
class Test
{
  public function simple_print() {
    echo "Hello world!
";
  }
}
$object = new Test;
$method = 'simple_print';
$object->$method();

As expected it creates the output Hello world! if executed on CLI.