PHP类:按实例名称调用类实例中的方法

时间:2010-03-28 23:56:47

标签: php oop

我有这类课程

Class Car {
private $color;

public function __construct($color){
$this->color=$color;
}

public function get_color(){
return $this->$color;
}

}

然后我创建它的一些实例:

$blue_car  = new car('blue');

$green_car = new car('green');

etc.

现在我需要根据实例的名称

动态调用方法get_color()
$instance_name='green_car';

有什么办法吗?

3 个答案:

答案 0 :(得分:5)

$$instance_name->get_color();
${$instance_name}->get_color();

或类似的东西。

编辑:

...测试

<?php
class test_class{
    public function __construct( $value ){
        $this->value = $value;    
    }
    public function getValue(){
        return $this->value;
    } 
}

$test = new test_class( "test" );
$test2 = new test_class( "test2" );

$iname = "test";
$iname2 = "test2";

echo $$iname->getValue(), "\r\n";    \\ echos test
echo ${$iname2}->getValue(), "\r\n"; \\ echos test2

?>

两者都值得在PHP 5.2

答案 1 :(得分:0)

$green_car->get_color()

将等同于

call_user_func(array($$instance_name, 'get_color'))

答案 2 :(得分:0)

我不确定为什么需要“按名称”调用实例,通常只是将实例作为参数传递或将其分配给另一个变量。默认情况下,PHP5只会对该类进行另一次引用,而不是复制它。但你可以使用=&amp;为了好的措施,让你明白你在做什么。

$blue_car = new Car('blue');
$red_car = new Car('red');

$current_car =& $blue_car
$current_car->get_color();  // returns blue car's color

$current_car =& $red_car
$current_car->get_color();  // returns red car's color