Как реализовать такие хитрые классы на PHP 5.3 и 7?

Помогите, пожалуйста, понять, есть ли опечатка в задании из технического собеседования:
Задача 1, php 5.3.0
# [1] PHP >= 5.3
/**
  Написать реализацию класса SimpleClass, при которой
  код, приведенный ниже напечатает Hellow world в консоль
*/
$obj = new SimpleClass;
$obj()->stdout('Hello')->stdout(' world');

Обратите внимание на скобки после вызова $obj: $obj()-> Если это не ошибка, то как реализовать такой класс?

----------------------------------------------------------------------------------------
А здесь вообще непонятно:
Задача 2, php 7
# Для знатоков!! PHP > =7
/**
 * Написать реализацию класса SimpleClass при которой вызов конструкции будет корректным.
 * Вызов без аргумента будет трактоваться как "печать перевода строки", так что данная конструкция

(new SimpleClass)('Hello')()('world')()('1');

 напечатает в консоль:

Hello
world
!

*/

Как такое может быть реализовано?
  • Вопрос задан
  • 352 просмотра
Решения вопроса 1
1-е задание.
class SimpleClass
{
    public function __invoke() 
    {
        return $this;
    }

    public function stdout($string) 
    {
        echo $string;
        return $this;
    }
}


2-е задание:
class SimpleClass
{
    public function __invoke(string $string = PHP_EOL): self
    {
        echo $string;
        return $this;
    }
}


Не тестировал. Проверьте правильность сами.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы