За последние 24 часа нас посетили 8843 программиста и 839 роботов. Сейчас ищет 381 программист ...

Пользовательские функции(Гостевая книга)

Тема в разделе "PHP для новичков", создана пользователем ciklop, 1 сен 2019.

  1. ciklop

    ciklop Новичок

    С нами с:
    1 сен 2019
    Сообщения:
    14
    Симпатии:
    0
    Доброго времени суток уважаемые программисты, изучаю php по видео-курсам, застрял на моменте пользовательских функций(создание гостевой книги), повторяется переменная $messages из за чего не могу понять всю суть, можете пожалуйста заменить переменную($messages) на другие переменные, чтобы я смог понять откуда что берётся (желательно на разные переменные). Заранее благодарю.
    З.Ы. есть 2 файла index.php и func.php
    PHP:
    1. require_once 'func.php';
    2. if (!empty($_POST)) {
    3.     save_mess();
    4.     header("Location: {$_SERVER['PHP_SELF']}");
    5.     exit();
    6. }
    7.  
    8.  
    9. $messages = get_mess();
    10. $messages = array_mess($messages);
    11. print_arr($messages);
    PHP:
    1. <?php
    2.  
    3. function save_mess(){
    4.     $str = $_POST['name'] . "|" . $_POST['text'] . "|" . date('Y-m-d H:i:s') . "\n***\n";
    5.     file_put_contents('gb.txt', $str, FILE_APPEND);
    6. }
    7.  
    8. function get_mess(){
    9.  
    10.     return file_get_contents('gb.txt');
    11. }
    12.  
    13. function array_mess($messages){
    14.     $messages = explode("\n***\n", $messages);
    15.     array_pop($messages);
    16.     return $messages;
    17. }
    18.  
    19. function print_arr($arr){
    20. echo '<pre>' . print_r($arr, true) . '</pre>';
    21.  
    22. }
    23.  
    24. ?>
     
    #1 ciklop, 1 сен 2019
    Последнее редактирование: 1 сен 2019
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.490
    Симпатии:
    1.731
    @ciklop, для начала расскажи, в чём разница межу глобальными и локальными переменными?
     
  3. ciklop

    ciklop Новичок

    С нами с:
    1 сен 2019
    Сообщения:
    14
    Симпатии:
    0
    В видео-курсе не было глобальных и локальных переменных, но пока искал ответ на свой вопрос, наткнулся на пару статей, где описывали эти понятия, как я понял, глобальный это вне функции, а локальные это внутри функции.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.490
    Симпатии:
    1.731
    ОК, близко :) Теперь расскажи, что делает каждая функция в этом куске в твоём понимании
     
  5. ciklop

    ciklop Новичок

    С нами с:
    1 сен 2019
    Сообщения:
    14
    Симпатии:
    0
    Хорошо)
    save_mess - сохраняет сообщения в файл(gb.txt)
    get_mess - возвращает сообщения из файла в переменную
    array_mess - создает из сообщений массив(разделяя их по разделителью)
    print_arr - выводит сообщения(массив)
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.490
    Симпатии:
    1.731
    Похоже на правду. Теперь сам должен в состоянии сказать
    1. что записывается в переменную $messages в строке 9
    2. Что происходит в строке 10
    Не знаю, объяснил ли этот момент видео-гуру, но присвоение выполняется справа налево - т.е. сначала считается значение которое надо присвоить, а потом присваивается. Поэтому в обоих частях может быть одна и та же переменная.
     
  7. ciklop

    ciklop Новичок

    С нами с:
    1 сен 2019
    Сообщения:
    14
    Симпатии:
    0
    Вот собственно тут у меня глюк, не могу понять, как в одну переменную пишет другую и как всё происходит? если вы поменяете мне переменные(все) $messages на хотя бы буквы, я пойму как, что происходит.
    В 9-ой строке, если правильно понял, в переменную пишется результат функции(то что функция возвращает)
    а в 10-ой не понимаю.
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.490
    Симпатии:
    1.731
    Ещё раз: сначала вычисляется, потом присваивается. То же самое, что
    PHP:
    1. $i = $i + 5;
    1. Берётся то значение, которое было записано в $i
    2. К нему добавляется 5
    3. Результат записывается обратно в переменную $i
    В вашем примере, соответственно
    1. Берётся то, что записано в переменную $messages на момент, когда интерпретатор начал выполнять строку 10
    2. Это значение передаётся в функцию
    3. Результат функции записывается обратно в $messages
    Так понятно? Мы можем перезаписывать то, что в переменных, на то они и переменные. А в php мы ещё можем менять тип переменной налету. Так, на начало выполнения строки 10 в $messages была строка, а после выполнения там будет массив.
     
  9. ciklop

    ciklop Новичок

    С нами с:
    1 сен 2019
    Сообщения:
    14
    Симпатии:
    0
    Да, благодарю, так по понятнее, но возникает другой вопрос
    PHP:
    1. function array_mess($messages){
    2.     $messages = explode("\n***\n", $messages);
    3.     array_pop($messages);
    4.     return $messages;
    Аргумент функции обязана быть той же переменной? Если эта переменная локальная, как функция берет значение этой переменной?
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.490
    Симпатии:
    1.731
    Нет, не обязательно. Аргумент функции - это несколько другое, при вызове функции интерпретатор вычисляет значение переданных параметров, и передаёт их.
    --- Добавлено ---
    Дополните просмотр видео чтением https://www.php.net/manual/ru/langref.php, всё станет значительно понятнее
     
  11. ciklop

    ciklop Новичок

    С нами с:
    1 сен 2019
    Сообщения:
    14
    Симпатии:
    0
    Спасибо, немного прояснилось)
    То есть мы можем написать Так?
    PHP:
    1. function array_mess($a){
    2.     $b = explode("\n***\n", $a);
    3.     array_pop($b);
    4.     return $b;
    И если Да, то эту часть
    PHP:
    1. $messages = array_mess($messages);
    надо менять или $а и $b оба могут быть $messages
     
  12. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    так проканает интересно?)
    PHP:
    1. print_arr( array_mess( get_mess() ) );
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.490
    Симпатии:
    1.731
    А что, по твоему не должно? Вполне себе нормальный вызов
    --- Добавлено ---
    @ciklop, конечно могут быть. Ну гоняешь ты теперь из одной переменной в другую. А вообще, читай руководство, не надо всякую фигню смотреть
     
  14. ciklop

    ciklop Новичок

    С нами с:
    1 сен 2019
    Сообщения:
    14
    Симпатии:
    0
    В руководстве не нашел про аргументы функций,
    PHP:
    1. function array_mess($a){
    2.     $b = explode("\n***\n", $a);
    3.     array_pop($b);
    4.     return $b;
    Тут могу не задать аргумент $b?
     
  15. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @ciklop, это не аргумент, это обычная переменная, область видимости которой сама функция.
    Аргумент - это то что в скобочках после имени функции. Аргументом $b становится внутри array_pop.
     
  16. ciklop

    ciklop Новичок

    С нами с:
    1 сен 2019
    Сообщения:
    14
    Симпатии:
    0
    А в array_mess не надо $b задать аргументом? То есть так все будет работать корректно?
     
  17. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
  18. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.620
    Симпатии:
    603
    Нафига, когда ты Б получаешь из А?

    P.S. Пора на форуме открывать раздел «Ясли».
     
  19. ciklop

    ciklop Новичок

    С нами с:
    1 сен 2019
    Сообщения:
    14
    Симпатии:
    0
    Не злитесь уважаемый, на то форум и нужен, чтобы новички смогли спросить у знающих)))
    Спасибо всем за ответы, разобрался, вы лучшие