За последние 24 часа нас посетили 22232 программиста и 1028 роботов. Сейчас ищут 639 программистов ...

Вопрос по ООП

Тема в разделе "PHP для новичков", создана пользователем Yankovitz, 15 дек 2018.

  1. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Добрый день. Изучаю ООП. Прошу направить. Есть следующий класс:
    Код (Text):
    1. class Email {
    2.     public $to = '';
    3.     public $subject = '';
    4.     public $message = '';
    5.  
    6.     function __construct( $args = false ) {
    7.         $this->init_properties( $args );
    8.     }
    9.  
    10.     function init_properties( $args ) {
    11.         $properties = get_class_vars( get_class( $this ) );
    12.         foreach ( $properties as $name => $val ) {
    13.             if( isset( $args[$name] ) ) $this->$name = $args[$name];
    14.         }
    15.     }
    16.  
    17.     function get_to() {
    18.         if ( $this->to == '' ) {
    19.             return 'my@mail.ru'
    20.         }
    21.     }
    22.  
    23.     function send_mail() {
    24.         $to      = $this->get_to;
    25.         $subject = $this->subject;
    26.         $message = $this->message;
    27.         mail( $to, $subject, $message );
    28.     }
    29. }
    30.  
    31. function send_my_mail( $to = '', $subject = '', $message = '' ) {
    32.     $args = array(
    33.         'to'          => $to,
    34.         'subject'     => $subject,
    35.         'message'     => $message
    36.     );
    37.     $email = new Email( $args );
    38.     return $email->send_mail();
    39. }
    Почему при вызове функции send_my_mail( '', 'Тема', 'Сообщение' ) выдаёт ошибку?
    Код (Text):
    1. Notice: Undefined property: Email::$get_to
    И как её исправить. Прошу помощи
     
  2. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    $get_to - где?
    24 строка $to = $this->get_to;
    у тебя $this->get_to не объявлена она.
     
  3. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Получается, метод тоже должен быть оформлен в виде:
    Код (Text):
    1. public $get_to;
    ???
     
  4. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    В методе send_mail() идет присвоение $to = $this->get_to;
    get_to - для него не метод, это свойство (переменная)
    вот так get_to() - это метод, скобки забыли.
    Т.е. в 24-ой строке нужно записать $to = $this->get_to();
    Соответственно в тексте ошибки и написано :
    Код (Text):
    1. Примечание: неопределенное свойство: Email :: $ get_to
     
    #4 AlexandrS, 15 дек 2018
    Последнее редактирование: 15 дек 2018
  5. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Благодарю, вы правы, не увидел
     
  6. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Бывает и $this-> не пропишешь тоже потом думаешь что за...! :)
    Порой очень полезно вставлять текст ошибки в гугл переводчик ;)
     
  7. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    А ещё лучше пользоваться правильной средой разработки.
    Как минимум правильным редактором, - 99% вопросов по ошибкам синтаксиса отпадут.
     
  8. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Это для ленивых! Тру пацаны пишут в в бумажном блокноте, потом перепечатывать в блокнот (текстовый редактор) :)
     
  9. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @AlexandrS, в 91 году я так и писал в бумажный блокнотик, потому что компа не было :)