В чем разница при вызове переменных?

109
22 июня 2019, 16:00

В чём разница использования следующих вызовов переменных? Как я понял, одни из них устарели и не безопасны, но в чём это заключается я так и не понял.

  1. $names = fix_names("WILLIAM", "henry", "gatES");
    function fix_names($n1, $n2, $n3)
    {
        $n1 = ucfirst(strtolower($n1));
        $n2 = ucfirst(strtolower($n2));
        $n3 = ucfirst(strtolower($n3));
        return array($n1, $n2, $n3);
    }
    echo $names[0] . " " . $names[1] . " " . $names[2]."<br>";
  2. $a1 = "WILLIAM";
    $a2 = "henry";
    $a3 = "gatES";
    function fix_names(&$n1, &$n2, &$n3)
    {
        $n1 = ucfirst(strtolower($n1));
        $n2 = ucfirst(strtolower($n2));
        $n3 = ucfirst(strtolower($n3));
    }
    echo $a1." ".$a2." ".$a3."<br>";
    fix_names($a1, $a2, $a3);
    echo $a1." ".$a2." ".$a3;
  3. $a1 = "WILLIAM";
    $a2 = "henry";
    $a3 = "gatES";
    function fix_names()
    {
        global $a1; $a1 = ucfirst(strtolower($a1));
        global $a2; $a2 = ucfirst(strtolower($a2));
        global $a3; $a3 = ucfirst(strtolower($a3));
    }
    echo $a1." ".$a2." ".$a3."<br>";
    fix_names();
    echo $a1." ".$a2." ".$a3;
Answer 1

Первый отличается от других тем, что он не портит переданные аргументы и является чистой функцией. Третий отличается от второго, тем что он знает, какие именно переменные надо менять и делает это самостоятельно.

Answer 2

Разницы тут нет, все три - это все какие-то извращенные способы работы с переменными. Ни один из них не является небезопасным или устарел, но они все просто неудобные. Последний, впрочем, все же хуже первых двух - после вызова функции переменные вдруг меняют свое значение, и непонятно по какой причине.

Проще всего сделать простую и понятную функцию и просто и понятно ее вызывать

function fix_name($n)
{
    return ucfirst(strtolower($n));
}
$a1 = "WILLIAM";
$a2 = "henry";
$a3 = "gatES";
echo fix_name($a1) . " " . fix_name($a2) . " " . fix_name($a3)."<br>"; 
READ ALSO
PHP удалённое подключение к MySQL

PHP удалённое подключение к MySQL

положил страницу с вот таким php скриптом на удалённый хостинг

143
Sumfony console, как читать stdin

Sumfony console, как читать stdin

Пишу простое консольное приложение с командами на основе классов Symfony\Component\Console\Command\Command

131
Internal Server Error при вызове in_array

Internal Server Error при вызове in_array

Кто-нибудь сталкивался с проблемой, когда вызов in_array на большом массиве (500 000 элементов) выдает internal Server Error? Вызывается внутри перебора RecursiveIteratorIterator...

132