Классы PHP: вызов метода в экземпляре класса по имени экземпляра - PullRequest
1 голос
/ 29 марта 2010

у меня есть такой класс

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 ]

5 голосов
/ 29 марта 2010
$$instance_name->get_color();
${$instance_name}->get_color();

или что-то в этом роде.

Edit:

Испытано ...

<?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

0 голосов
/ 29 марта 2010

Я не уверен, почему нужно вызывать экземпляр «по имени», обычно вы просто передаете экземпляр в качестве параметра или назначаете его другой переменной. По умолчанию PHP5 просто делает еще одну ссылку на класс, а не копирует его. Но вы можете использовать = & для хорошей меры и сделать очевидным, что вы делаете.

$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
0 голосов
/ 29 марта 2010
$green_car->get_color()

будет эквивалентно

call_user_func(array($$instance_name, 'get_color'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...