Загадка про PHP. Номер 10.

Дано:

error_reporting(0);

$a = 'Kn';
$a = new $a.'ock';

class Knock
{
  function Knock()
  {
    global $a;
    print_r($a);
  }
}

class Kn
{
  function Kn()
  {
    global $a;
   print_r($a);
  }
}

Что будет в результате?

Комментарии 16

Улитка № 1
Будет 'Kn' и сообщение об ошибке.
Евгений Степанищев автор № 2
Во-первых, error_reporting(0), а во-вторых, даже без этого сообщения об ошибке не будет. Хотя, возможно, последнее зависит от версии, но я просто не вижу места где эта ошибка может возникнуть. у new просто более высокий приоритет по сравнению с конкатенацией, поэтому единственное спорное место там синтаксически верно.
Улитка № 3
Сообщение об ошибке будет в логе, по поводу того, что мы пытаемся выполнить конкатенацию объекта со строкой.
Евгений Степанищев автор № 4
Странно, приведи строчку, пожалуйста. Мне кажется, что точка должна перевести объект в строковое представление (т.е. в «Object») с чем и произойдёт конкатенация.
Улитка № 5
Проверил — все так, никаких ошибок, в $a записывается 'Objectock'.

Кстати, пример твой не работает, пришлось его руками набирать.
Специально так сделал или случайно получилось?
Улитка № 7
Сама программа работает, но если ее вставить в Блокнот через Copy+Paste, то интерпретатор начинает жаловаться на определение функции Knock:

Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in test.php on line 7

Содержимое седьмой строки:

function Knock()
Евгений Степанищев автор № 8
Странно, даже если я вставляю через блокнот у меня всё работает. Ты точки с запятой где не надо не поставил случайно?
Улитка № 13
Попробовал переключать кодировки — то же самое.
Хитрая защита от копирования программ реализована в Опере :-)

По байтам тоже совпадает. Должно работать — ан нет.
Улитка № 15
Про Unicode я в первую же очередь подумал! В Windows 2000 Блокнот уникодовский стал, часто такие штуки выкаблучивает.
Еще интересно: на определение класса он не ругается, не нравится интерпретатору именно функция-конструктор.
Mash № 16
2Улитка:
Opera 7.11, Notepad, WinXP, Copy&Paste => всё работает.
Что делаю не так? :)))

з.ы. Почему все всегда всё валят на Оперу?