Укороченная версия: Почему мы не можем получить доступ к такой функции:
$b = "simple_print()";
$obj->$b;
Полная версия:
Предположим, у нас есть класс User, определенный следующим образом:
class User {
public $name;
function simple_print() {
echo "Just Printing" . "<br>";
}
}
Теперь, если создать объект User и задать его имя, мы можем напечатать его имя, используя
$obj = new User;
$obj->name = "John";
echo $obj->name;
Хотя это странно, мы также можем сделать что-то подобное, чтобы напечатать «Джон»:
$a = "name";
echo $obj->$a;
Но мы не можем получить доступ к функции, используя ту же идею:
$b = "simple_print()";
$obj->$b;
Зачем? Разве это не должно работать так же?
Кроме того, кто-нибудь знает как это называется? Я пытался найти «доступ к члену через переменную» и «использование метода через переменную с именем», но я не нашел ничего связанного с этим.
Дополнительная информация: Версия PHP, которую я использую: PHP версия: 5.5.9-1ubuntu4.7
Вы были очень близки, но допустили небольшую логическую ошибку. Попробуйте это вместо этого:
$b = 'simple_print';
$obj->$b();
Это потому, что к методу обращаются по его имени, которое simple_print
не simple_print()
, Выполнение запускается в круглых скобках, но это не часть имени, так о том, как вы получаете доступ к методу.
Вот короткий пример:
<?php
class Test
{
public function simple_print() {
echo "Hello world!\n";
}
}
$object = new Test;
$method = 'simple_print';
$object->$method();
Как и ожидалось, это создает выход Hello world!
если выполняется на CLI.
Других решений пока нет …