Переменные переменные, функции и классы - PullRequest
0 голосов
/ 08 сентября 2011

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

$name = "ABC";
$$name = "DEF";
echo ${"ABC"}; //Gives: DEF

Это заставило меня задуматься, что подводит нас к моему вопросу:

Поскольку у нас могут быть имена, которые являются переменными, не можем ли мы также иметь функции, которые являются переменными?Не «функции», как в именах функций, но (более или менее), как в:

$func = 'function test() { echo "Success!"; }';
$func(); //If this would work, it would give: Success!

Или, что еще лучше, классы переменных:

$class = 'class { function test() { echo "Success!"; } }';
$instance = new $class;
$instance->test(); //In a (not-so) perfect world this would give: Success!

Любое из этого возможно

Ответы [ 3 ]

2 голосов
/ 08 сентября 2011

Излишне говорить, что его полезность огромна

Вы не можете ошибаться.
В переменных нет абсолютно ничего хорошего.Вы бы лучше обнаружили массивы

В PHP также есть имена переменных функций, и это немного более удобно, но все же делает чтение вашего кода пыткой .Так что лучше их тоже избегать.

Вспомните судьбу самого известного языка только для записи.PHP съел это за один прием, только из-за читабельности PHP.Не пытайтесь сделать Perl из PHP.Написание кода - это отдых, а поиск ошибок в нем - НАСТОЯЩАЯ работа.Не усложняй свою работу.

Не пишите неясный и озадаченный код.
Пишите прямой и чистый код.
Вы окажете огромную услугу себе и другим людям, которые с ним работают.

1 голос
/ 08 сентября 2011

не знаю о вашем третьем примере, но ваш второй должен почти сработать (при условии, что вы используете php 5.3 или выше;)).просто оставьте свои кавычки и имя функции:

$func = function() { echo "Success!"; };
$func(); //should give: Success!

ищите «анонимную функцию» или, чтобы узнать больше об этом, просто посмотрите на документацию .

0 голосов
/ 08 сентября 2011

Единственный способ, которым это будет работать, - это eval.

$func = "echo 'Success!';";
eval($func);

Вы также можете использовать переменные для вызова функций.

function foo()
{
    echo 'Success';
}

$foo = 'foo';
$foo();

СохранитьИмейте в виду - вы входите в опасную область PHP, так как это обычно только запутывает ваш код для будущих разработчиков, которым приходится поддерживать ваш код (включая вас в течение нескольких месяцев).

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