PHP строка для имени объекта - PullRequest
4 голосов
/ 03 мая 2010

Хорошо, у меня есть строка ...

$a_string = "Product";

и я хочу использовать эту строку при вызове объекта, подобного этому:

$this->$a_string->some_function();

Как, Диккенса, я динамически называю этот объект?

(не думайте, что я нахожусь на пятом уме)

Ответы [ 6 ]

3 голосов
/ 03 мая 2010

Таким образом, вы хотите использовать код:

$a_string = "Product";
$this->$a_string->some_function();

Этот код подразумевает несколько вещей. Класс под названием Product с методом some_function(). $this имеет особое значение и действителен только внутри определения класса. Таким образом, другой класс будет иметь член Product class.

Итак, чтобы сделать ваш код легальным, вот код.

class Product {
    public function some_function() {
        print "I just printed Product->some_function()!";
    }
}

class AnotherClass {

    public $Product;

    function __construct() {
        $this->Product = new Product(); 
    }

    public function callSomeCode() {
        // Here's your code!
        $a_string = "Product";
        $this->$a_string->some_function();
    }
}

Тогда вы можете назвать это так:

$MyInstanceOfAnotherClass = new AnotherClass();
$MyInstanceOfAnotherClass->callSomeCode();
1 голос
/ 03 мая 2010

Кажется, я прочитал этот вопрос не так, как все, кто ответил, но вы пытаетесь использовать переменные ?

0 голосов
/ 03 мая 2010

Итак, у вас есть объект, и одним из его свойств (называемых «Product») является другой объект, у которого есть метод с именем some_function ().

Это работает для меня (в PHP5.3):

<?PHP


class Foo {
     var $bar;
}

class Bar {
      function some_func(){
           echo "hello!\n";
      }
}

$f = new Foo();
$f->bar = new Bar();

$str = 'bar';

$f->$str->some_func(); //echos "hello!"

У меня нет PHP4, но если он там не работает, вам может понадобиться использовать call_user_func () (или call_user_func_array (), если вам нужно передать аргументы в some_function ()

0 голосов
/ 03 мая 2010

Посмотрим, правильно ли я понял ваши намерения ...

$some_obj=$this->$a_string;
$some_obj->some_function();
0 голосов
/ 03 мая 2010

В коде, который вы показали, похоже, что вы пытаетесь вызвать функцию из самой строки. Я предполагаю, что вы хотите вызвать функцию из класса с тем же именем, что и у этой строки, в данном случае «Product».

Вот как это будет выглядеть:

$this->Product->some_function();

Возможно, вместо этого вы ищете что-то вроде этого:

$Product = new Product();
$Product->some_function();
0 голосов
/ 03 мая 2010

РЕДАКТИРОВАТЬ : вам нужно запустить PHP5 для того, чтобы выполнить любой метод цепочки. После этого то, что у вас есть, совершенно законно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...