<?php
function random_sample($massiv, $how_much) {
    // array_rand - пример плохого дизайна в "PHP":
    // если второй аргумент равен 1, возвращает значение, иначе возвращает массив.
    // А ещё обёртка понадобилась, потому что она возвращает ключи.
    return $how_much === 1 ? $massiv[array_rand($massiv)] : array_values(array_intersect_key($massiv, array_flip(array_rand($massiv, $how_much))));
}

class get_advice {
    const ADVICES_VERBS = [
        'выключите',
        'включите',
        'перезагрузите',
        'проверьте',
        'переустановите',
        'запустите',
        'закройте',
    ];
    const ADVICES_NOUNS = [
        ['компьютер'],
        ['роутер'],
        ['программу'],
        ['средство', 'восстановления', 'Windows'],
        ['браузер'],
        ['сайт'],
        ['панель', 'управления'],
        ['антивирус'],
    ];
    const ADVICES_PREPS = [
        ['а', 'затем'],
        ['после', 'чего'],
        ['и'],
        ['а', 'если', 'это', 'не', 'сработает,', 'то'],
    ];
    function __toString() {
        $verbs = random_sample(self::ADVICES_VERBS, 2);
        $nouns = array_map(function($pituh) {return implode(' ', $pituh);}, random_sample(self::ADVICES_NOUNS, 2));
        $prep = random_sample(self::ADVICES_PREPS, 1);
        $verbs[0] = mb_convert_case($verbs[0], MB_CASE_TITLE);
        $joiner = $prep[0] !== 'и' ? ', ' : ' ';
        $prep = implode(' ', $prep);

        return "$verbs[0] $nouns[0]$joiner$prep $verbs[1] $nouns[1].";
    }
}

echo new get_advice(), "\n";
