我有这类课程
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';
有什么办法吗?
答案 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