И то же самое можно
<?
$a = "bukva a";
$b = "bukva b";
$c = "a";
echo $$c;
?>
Такой код выведет "bukva a". И то же самое можно делать с объектами и их свойствами:
<?
class someclass1 {
var $a = 1;
var $b = 2;
var $c = 3;
}
class someclass2 {
var $a = 4;
var $b = 5;
var $c = 6;
}
$d = new someclass1;
$e = new someclass2;
$f = "d";
$g = "c";
echo ${$f}->{$g};
?>
(такой код выдаст "3")
То же касается и динамических имен функций.
В руководстве по PHP4 написано подробнее о [] и [].
И на прощанье вот что. В начале года мне надо было написать скрипт для рассылки новостей и прайс-листов подписчикам. Зашел я на сайт PHP и заглянул в [], чтобы найти что-нибудь про аттачмент. В комментариях к функции я нашел то, что искал - класс для вложения файла в письмо. За восемь месяцев туда накидали много ссылок на такие классы, а в феврале он был единственный - []. Так вот, как они делают - делать не надо (я тогда в классах разбирался смутно, и просто вырезал функции, несколько упростив код). Процитирую заголовки функций:
class CMailFile {
var $subject;
var $addr_to;
var $text_body;
var $text_encoded;
var $mime_headers;
var $mime_boundary = "--==================_846811060==_";
var $smtp_headers;
function CMailFile($subject,$to,$from,$msg,$filename,$mimetype = "application/octet-stream", $mime_filename = false) {
/* если функция имеет то же имя, что и класс, то это будет конструктор класса (см. ниже) */
function attach_file($filename,$mimetype,$mime_filename) {
/* Вот это не понимаю! attach_file вызывается из функции CMailFile - зачем? Только для красоты. А так - можно было этот кусок кода вставить прямо в главную функцию, раз уж решено сделать единовременный вызов функции. Далее идут несколько функций того же назначения и характера. */
Содержание Назад Вперед