функция вызова php внутри heredoc - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь вызвать функцию изнутри heredoc, и я прочитал в руководстве (пример # 2), что это возможно. Однако я получаю следующую ошибку: Notice: Undefined property: TIME::$since on line 13.

1   <?php class TIME {
2       var $month;
3       var $year;
4       public function since($y) {
5           $this->$month = (date("F"));
6           $this->$year = (date("Y")-$y);
7           return "(since $month of $year)";
8           // return "(since date('F') of {date('Y')-$y})";
9       }
10  }
11  $time = new TIME;
12  echo <<<EOF
13      {$time->since{1}};
14  EOF; ?>

Что мне нужно сделать, это передать 1 как целое число в функцию since() и вернуть строку типа (since January of 2011).

Ответы [ 3 ]

4 голосов
/ 11 января 2012

Это $time->since(1).Использование since{1} интерпретируется как «дайте мне второй символ строки, хранящейся в атрибуте объекта $ time, известного как« с тех пор »».

например:

$x = 'hello';
echo $x{0}; // outputs 'h'
echo $x{2}; // outputs 'l'
1 голос
/ 11 января 2012

В вашем коде много ошибок. $this->$month и $this->$year должны быть $this->month и $this->year в вашем случае, return "(since $month of $year)";, я думаю, должно быть return "(since {$this->month} of {$this->year})";, {$time->since{1}}; может быть {$time->since(1)}; и, наконец, EOF; ?> - конечный тег PHP должен быть на новой строке при закрытии heredoc:

EOF;
?>

P.S. Почему вы используете старое объявление свойств в стиле PHP4?

1 голос
/ 11 января 2012

все работает как ожидалось, но у вас нет свойства $since, но есть метод since(). Просто назовите это как метод

$time->since(1);

Здесь {1} - альтернативный синтаксис для доступа к массиву.

...