За последние 24 часа нас посетили 19012 программистов и 1888 роботов. Сейчас ищут 849 программистов ...

class

Тема в разделе "PHP для новичков", создана пользователем siiXth, 29 окт 2011.

  1. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    Решил учить ооп по ускоренной программе. Учитывая что я и классов не знаю , то начал с них =D Разумеется матерюсь по полной потому что не могу понять зачем оно надо и почему функция класса называется методом , это чтобы больше тупых терминов знать ? ну да ладно =D учить то надо )
    PHP:
    1. <?php
    2. class A {
    3.       function example() {
    4.           echo "Это первоначальная функция A::example().<br>";
    5.       }
    6.  }
    7.  
    8.  class B extends A {
    9.       function example() {
    10.           echo "Это переопределенная функция B::example().<br>";
    11.           A::example();
    12.       }
    13.  }
    14.  
    15. // Не нужно создавать объект класса A.
    16.  // Выводит следующее:
    17.  // Это первоначальная функция A::example().
    18. A::example();
    19.  
    20. // Создаем объект класса B.
    21. $b = new B;
    22.  
    23. // Выводит следующее:
    24.  //   Это переопределенная функция B::example().
    25.  //   Это первоначальная функция A::example().
    26. $b->example();
    27. ?>
    Я так и не понял как конкретно создавать обьект.
    A::example(); - работает

    $b = new B;
    $b->example(); - работает (как я понимаю, это нормальное создание обьекта, ну и вызов метода)

    B::example(); - тоже работает, хоть он и наследует.
    Не пойму в чём разница , зачем каждый раз писать new если работает и через ::
    ?
     
  2. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    siiXth
    совет, включи error_reporting(E_ALL | E_STRICT);

    A::example() - вызов статического метода непосредственно из класса. Для такого вызова не требуется объекта. Работает практически так же, как и обычная функция. Прим: в таком методе, нам естественно, недоступен экземпляр класса (объект)

    $b->exampe() - нормальный вызов метода у объекта, внутри функции (метода) есть доступ к состоянию объекта $b, т.е. метод example() может изменять поля объекта $b через стандартную переменную-ссылку $this

    Самое примитивное объяснения классов и объектов:
    1. Класс - описание нового типа данных с методами для их обработки (описываются поля и методы)
    2. Объект - переменная типа "Класс", содержит в себе как данные, так и методы обработки.

    Это очень удобно держать данные и методы для обработки этих данных в одном месте.

    Например
    Код (Text):
    1.  
    2. typedef struct Employer{
    3.     char *name,
    4.     int salary
    5. } Employer
    6.  
    7. int employer_pay(Employer &a){
    8.     // Заплатить пользователю
    9.     // a->salary рублей
    10. }
    11.  
    12. int main(){
    13.     Employer e;
    14.     e.name = "Vasja Pupkin";
    15.     e.salary = 5000;
    16.     employer_pay(&e);
    17. }
    PHP:
    1. <?php
    2. class Employer
    3. {
    4.    public $name;
    5.    public $salary;
    6.    public function pay(){
    7.       // Заплатить пользователю
    8.       // $this->salary рублей
    9.    }
    10. }
    11.  
    12. $e = new Employer();
    13. $e->name = 'Vasja Pupkin";
    14. $e->salary = 5000;
    15. $e->pay();
    16.