<?php
 
error_reporting(-1);
mb_internal_encoding('utf-8');
 
$text = "Кажется, нас обнаружили! Надо срочно уходить отсюда, пока не поздно. Бежим же скорее!";
// Другие варианты для тестов
$text = "Ну, прости меня! Не хотела я тебе зла сделать; да в себе не вольна была. Что говорила, что делала, себя не помнила.";
$text = "Идет гражданская война. Космические корабли повстанцев, наносящие удар с тайной базы, одержали первую победу, в схватке со зловещей Галактической Империей.";
 
/* Делает первую букву предложения заглавной */
function makeFirstLetterUppercase($text) {
    $parts = preg_split('/(?<=[.!?])/u', $text, 0, PREG_SPLIT_NO_EMPTY);
    $result = '';
		foreach($parts as $key => $sentence) {
			$sentence = trim($sentence);
			$otherPart = mb_substr($sentence, 1);
			$firstLetter = mb_strtoupper(mb_substr($sentence, 0, 1));
			$result = $result . $firstLetter . $otherPart . ' ';
		}
	return $result;
}
 
function makeYodaStyleText($text) {
 
    $result = '';
    $text = preg_replace('/[!?]/u', '.', $text);
    $parts = preg_split('/[.]/u', $text, 0, PREG_SPLIT_NO_EMPTY);
    foreach($parts as $key => $sentence) {
    	$words = preg_split('/\x20/', $sentence, 0, PREG_SPLIT_NO_EMPTY);
    	$words = array_reverse($words);
    	$result = $result . implode(' ', $words) . '. ';
    	$result = preg_replace('/[,!?;]/u', '', $result);
    }
    $length = mb_strlen($result);
    $result = mb_substr($result, 0, $length-1);
    $result = mb_strtolower($result);
    
    $result = makeFirstLetterUppercase($result);
    
    return $result;
}
 
$yodaText = makeYodaStyleText($text);
echo "Йода говорит: {$yodaText}\n";