3v4l.org

run code in 300+ PHP versions simultaneously
<?php function maybe_change_user_language( $site_lang, $user_lang, $selected_lang ) { $result = 'Do nothing.'; if ( $site_lang !== $selected_lang && $user_lang !== $selected_lang ) { $result = "Change from $user_lang to $selected_lang."; } return $result; } // Tests - Scroll to the bottom for results. function test_respect_user_language_preference( $expected, $site_lang, $user_lang, $selected_lang = 'English' ) { $user_lang = maybe_change_user_language( $site_lang, $user_lang, $selected_lang, ); echo 'Expected: ', $expected, PHP_EOL; echo 'Actual: ', $user_lang, PHP_EOL; return 'Result: ' . ( $expected === $user_lang ? 'Pass' : 'Fail' ); } $tests = array( 'defaults with nothing selected' => array( 'expected' => 'Do nothing.', 'site_lang' => 'English', 'user_lang' => 'English', 'selected_lang' => 'English', ), 'no existing preference and selects Spanish' => array( 'expected' => 'Change from English to Spanish.', 'site_lang' => 'English', 'user_lang' => 'English', 'selected_lang' => 'Spanish', ), 'already prefers Spanish and selects Spanish' => array( 'expected' => 'Do nothing.', 'site_lang' => 'English', 'user_lang' => 'Spanish', 'selected_lang' => 'Spanish', ), 'already prefers Spanish and selects nothing' => array( 'expected' => 'Do nothing.', 'site_language' => 'English', 'user_lang' => 'Spanish', 'selected_lang' => 'English', ), ); foreach ( $tests as $test => $args ) { $sep = str_pad( '', strlen( $test ), '=' ); echo $sep, PHP_EOL, $test, PHP_EOL, $sep, PHP_EOL; echo test_respect_user_language_preference( ...array_values( $args ) ), PHP_EOL, PHP_EOL; }
Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.6
============================== defaults with nothing selected ============================== Expected: Do nothing. Actual: Do nothing. Result: Pass ========================================== no existing preference and selects Spanish ========================================== Expected: Change from English to Spanish. Actual: Change from English to Spanish. Result: Pass =========================================== already prefers Spanish and selects Spanish =========================================== Expected: Do nothing. Actual: Do nothing. Result: Pass =========================================== already prefers Spanish and selects nothing =========================================== Expected: Do nothing. Actual: Do nothing. Result: Pass

preferences:
110.73 ms | 404 KiB | 121 Q