Не могу понять, почему не срабатывает функция при вызове по имени. PHP: function decode(){ $text = quoted_printable_decode($text); } $text = "=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82=0D=0A"; decode(); echo $text;
Гениально. --- Добавлено --- А доку почитать как функции работать должны. Да вообще книжку открыть полистать хотя бы. --- Добавлено --- PHP: function decode($text){ $text = quoted_printable_decode($text); return $text; } $text = "=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82=0D=0A"; $text = decode($text); echo $text; @dalet А вот теперь найди 4 отличия. От своей функции
и да ты что, а чем это поможет в данном случае? Ну ка так посотреть чтобы, а то я даже додуматься не могу как это, смастери мне код на глобальной переменной внутри функции;
Спасибо. Я думал, что указывать имя переменной в названии функции до создания переменной не имеет смысла.
вот тебе код, но так писать не стоит Код (Text): function decode(){ global $text; $text = quoted_printable_decode($text); } $text = "=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82=0D=0A"; decode(); echo $text;
Вот я по такому же примеру и делал: PHP: function change(){ global $text; $text='Ваш текст поменялся'; } $text='Очень хороший сайт'; change(); echo $text;
Так не сработает. Объявлять глобальную переменную глобальной в глобальной области - можно, а смысл? В функции-то ее все равно видно не будет. А вот так должно. Хотя все-таки global - не лучший выход. PHP: function decode(){ global $text; $text = quoted_printable_decode($text); } $text = "=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82=0D=0A"; decode(); echo $text;
А обязательно return $text; добавлять в код функции? Без него то же работает PHP: function decode($text){ $text = quoted_printable_decode($text); //return $text; } $text = "=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82=0D=0A"; $text = decode($text); echo $text;
@Хыиуду ide любая сама пишет. а это хлам. --- Добавлено --- да обязательно иначе это тогда не функция а процедура и тогда код тебе нужен следующий: PHP: function decode($text){ echo quoted_printable_decode($text); } $text = "=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82=0D=0A"; decode($text);
Именно. Это для imap код, там 6-7 разных условий, и в каждый нужно вписать фукнкцию декодирования, что вызовом функции по имени - удобней, чем полный код 7 раз копипастить. Я сторонник "чистого кода".
Итак, тема немного схуднула, весь срач ушел сюда. --- Добавлено --- Далее, автор, выбирай: 1) Вариант без return, передача параметра по ссылке. PHP: function decode(&$encoded_text){ $encoded_text = quoted_printable_decode($encoded_text); } $text = "=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82=0D=0A"; decode($text); echo $text; Злоупотреблять такими вещами не стоит, так как по-хорошему, лучше, чтобы функция явно что-то возвращала. Удобнее сопровождать такой код. А просто вызов с параметром - не очевидно, что оно делает, приходится лезть внутрь, смотреть. Оно ж может вообще на базе этой переменной, хз, нейросеть строить. 2) Православный вариант PHP: function decode($encoded_text){ return quoted_printable_decode($encoded_text); } $text = "=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82=0D=0A"; $text = decode($text); echo $text; Взяли переменную, отдали в функцию, присвоили результат работы обратно. Наглядно, просто, интуитивно. Варианты с global я бы не стал рассматривать. Этот не совсем тот случай, когда они нужны. Это вносит хаос в код очень часто. Код, над которым нет контроля - мусор. Пока у тебя скрипты мелкие, оно не ощущается. Но потом будет больно. Далее. Если ты внутри функции объявил переменную с тем же именем, что и вне функции, это все равно две разные переменные. Внутри функции своя область видимости, закрытая от внешнего мира. Программа в программе. Если надо кровь из носу как передать внутрь функции переменную, объявленную извне, но не явно, то да, юзаем global. Мы как бы говорим функции, что переменную с таким вот именем надо искать не внутри своей области видимости, а снаружи. Далее. Тут был озвучен тезис "если для новичка - то пофиг как, лишь бы работало". Это плохо. Для новичка, который не умеет еще отличать добро ото зла, это буквально приговор.
так же есть, ещё замыкание. use там все дела --- Добавлено --- PHP: $str = 'Кушак из серебра'; function anon ($string) use ($str) { return $str . $string; } echo anon(', где же он?'); --- Добавлено --- Использование глобальных переменных может привести к следующему результату: PHP: <?php global $var; $var = false; // Допустим пусть тут в вар попадают переменные с гета if (!empty($_GET['id'])) $var = $_GET['id']; .... /* Какой - то кусок кода*/ ... потом ты делаешь где нибудь вот так $res = $db->fetch(); // допустим получили строку $var = functionAnonimus($res['id']); ... /*ниже ещё кусок огромный кода*/ /*где на основе первой глобальной выполняются действия например:*/ ... if($var === false) { // Исполнение некоего алгоритма } else { // И тут что-то другое //и тут например другое обработка нашей $var напрмиер запрос к бд по id $res = $dv->query('select')->where('id', '=', $var)->get(); // Тут уже случится фатальная ошибка. И код дальше не пойдёт print_r($res); } --- Добавлено --- Когда в коде уже переваливает за 10 тки тыщ строк ориентироваться по нему оч тяжело. --- Добавлено --- Иде конечно спасает во многом если пишем по всем правильным стандартам. Но если ещё выкидывать такие плюхи, то это будет просто не реально поддерживать.
Ключевой момент в том, что ты ведь не пишешь функцию под одну конкретную переменную? В таком случае и смысла особого в ней нет скорее всего. У функции есть понятие "параметр". Когда ты передаешь в нее переменную, то ее значение копируется в параметр. И функция работает с ним, не влияя на переданную переменную. Это если просто передать. А если как в моем первом примере - влияет, тогда ты в параметр передаешь не просто значение, а ссылку на саму переменную. И оперируешь как бы непосредственно с ней уже. Более того, в функцию можно передавать не переменную, а просто константное значение неименованное. PHP: function foo($bar){ echo $bar; } foo('123');
Т.е. так: PHP: <?php $str = 'Кушак из серебра'; $anon = function ($string) use ($str) { return $str . $string; }; echo $anon(', где же он?');
Иде конечно спасает во многом если пишем по всем правильным стандартам. Но если ещё в ? я в любом методе их юзаю. И там определённо не анонимные они. --- Добавлено --- В чём прикол почему так? --- Добавлено --- я просто уже давно функции не юзаю я в основном хреначу на методах всё... Да и use на функцию в жизни не юзал, но думал так же как на метод применяется