Доступ к члену класса с использованием строковой переменной с именем члена

Укороченная версия: Почему мы не можем получить доступ к такой функции:

$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

0

Решение

Вы были очень близки, но допустили небольшую логическую ошибку. Попробуйте это вместо этого:

$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.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector