2012-01-11 3 views
0

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

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

+1

так как {1} должен быть с (1) - так как это вызов функции –

+0

Вы пробовали переименовать свой класс, скажем, в TimeSince? –

+1

И если вы попробуете '{$ time-> since (1)}' вместо '{$ time-> с {1}}'? – Elorfin

ответ

1

У вас много ошибок в коде. $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; 
?> 

PS Почему вы используете старую декларацию свойств стиля в стиле PHP4?

+0

О, вау, это многое объясняет ^^, спасибо! Кстати, что вы имеете в виду «объявление свойств стиля в стиле PHP4»? – jacob

+0

@jacob, к которому относится timur, относится к этому: 'var $ month;' проверьте это: [PHP5 Variables Basics docs] (http://www.php.net/manual/en/language.variables.basics.php) – ThinkingMonkey

+0

@ThinkingMonkey, я обычно этого не делаю, но поскольку у меня были проблемы, я попытался следовать примеру на странице. – jacob

4

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

например:

$x = 'hello'; 
echo $x{0}; // outputs 'h' 
echo $x{2}; // outputs 'l' 
1

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

$time->since(1); 

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