Доброго времени суток уважаемые программисты, изучаю php по видео-курсам, застрял на моменте пользовательских функций(создание гостевой книги), повторяется переменная $messages из за чего не могу понять всю суть, можете пожалуйста заменить переменную($messages) на другие переменные, чтобы я смог понять откуда что берётся (желательно на разные переменные). Заранее благодарю. З.Ы. есть 2 файла index.php и func.php PHP: require_once 'func.php'; if (!empty($_POST)) { save_mess(); header("Location: {$_SERVER['PHP_SELF']}"); exit(); } $messages = get_mess(); $messages = array_mess($messages); print_arr($messages); PHP: <?php function save_mess(){ $str = $_POST['name'] . "|" . $_POST['text'] . "|" . date('Y-m-d H:i:s') . "\n***\n"; file_put_contents('gb.txt', $str, FILE_APPEND); } function get_mess(){ return file_get_contents('gb.txt'); } function array_mess($messages){ $messages = explode("\n***\n", $messages); array_pop($messages); return $messages; } function print_arr($arr){ echo '<pre>' . print_r($arr, true) . '</pre>'; } ?>
В видео-курсе не было глобальных и локальных переменных, но пока искал ответ на свой вопрос, наткнулся на пару статей, где описывали эти понятия, как я понял, глобальный это вне функции, а локальные это внутри функции.
Хорошо) save_mess - сохраняет сообщения в файл(gb.txt) get_mess - возвращает сообщения из файла в переменную array_mess - создает из сообщений массив(разделяя их по разделителью) print_arr - выводит сообщения(массив)
Похоже на правду. Теперь сам должен в состоянии сказать что записывается в переменную $messages в строке 9 Что происходит в строке 10 Не знаю, объяснил ли этот момент видео-гуру, но присвоение выполняется справа налево - т.е. сначала считается значение которое надо присвоить, а потом присваивается. Поэтому в обоих частях может быть одна и та же переменная.
Вот собственно тут у меня глюк, не могу понять, как в одну переменную пишет другую и как всё происходит? если вы поменяете мне переменные(все) $messages на хотя бы буквы, я пойму как, что происходит. В 9-ой строке, если правильно понял, в переменную пишется результат функции(то что функция возвращает) а в 10-ой не понимаю.
Ещё раз: сначала вычисляется, потом присваивается. То же самое, что PHP: $i = $i + 5; Берётся то значение, которое было записано в $i К нему добавляется 5 Результат записывается обратно в переменную $i В вашем примере, соответственно Берётся то, что записано в переменную $messages на момент, когда интерпретатор начал выполнять строку 10 Это значение передаётся в функцию Результат функции записывается обратно в $messages Так понятно? Мы можем перезаписывать то, что в переменных, на то они и переменные. А в php мы ещё можем менять тип переменной налету. Так, на начало выполнения строки 10 в $messages была строка, а после выполнения там будет массив.
Да, благодарю, так по понятнее, но возникает другой вопрос PHP: function array_mess($messages){ $messages = explode("\n***\n", $messages); array_pop($messages); return $messages; Аргумент функции обязана быть той же переменной? Если эта переменная локальная, как функция берет значение этой переменной?
Нет, не обязательно. Аргумент функции - это несколько другое, при вызове функции интерпретатор вычисляет значение переданных параметров, и передаёт их. --- Добавлено --- Дополните просмотр видео чтением https://www.php.net/manual/ru/langref.php, всё станет значительно понятнее
Спасибо, немного прояснилось) То есть мы можем написать Так? PHP: function array_mess($a){ $b = explode("\n***\n", $a); array_pop($b); return $b; И если Да, то эту часть PHP: $messages = array_mess($messages); надо менять или $а и $b оба могут быть $messages
А что, по твоему не должно? Вполне себе нормальный вызов --- Добавлено --- @ciklop, конечно могут быть. Ну гоняешь ты теперь из одной переменной в другую. А вообще, читай руководство, не надо всякую фигню смотреть
В руководстве не нашел про аргументы функций, PHP: function array_mess($a){ $b = explode("\n***\n", $a); array_pop($b); return $b; Тут могу не задать аргумент $b?
@ciklop, это не аргумент, это обычная переменная, область видимости которой сама функция. Аргумент - это то что в скобочках после имени функции. Аргументом $b становится внутри array_pop.
Не злитесь уважаемый, на то форум и нужен, чтобы новички смогли спросить у знающих))) Спасибо всем за ответы, разобрался, вы лучшие