Задать вопрос

Какой смысл создавать объект, если можно использовать статический метод?

Здравствуйте. Интересует вопрос:

Зачем и когда нужно создавать объекты классов, если, по сути, можно пользоваться статическими методами не создавая объектов? Не очень понимаю, когда уместнее создавать объект, а когда пользоваться статикой.

Например:

class Test1 {
  public static function result() {
    return 2*2;
  }
}

// Использование

$test1 = new Test1();
$test1->result(); //4


VS

class Test2 {
  public function result() {
    return 2*2;
  }
}

//Использование

Test2::result(); //4


Какая в этом разница? Когда что лучше? Спасибо.
  • Вопрос задан
  • 1289 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Представьте интернет магазин. Есть объект: товар. У товара есть что? Ну цена например. Если сделать только класс Product и статический метод getPrice(), то у всех товаров будет только одна цена. А если использовать объекты, то у каждого товара будет свой метод getPrice(), который будет отдавать цену именно этого товара.
И вообще, раз вы задаете такой вопрос, вы еще не научились думать в ООП режиме, у вас в голове засел процедурный подход. "Надо написать функцию, что б она что-нибудь посчитала". Выбивайте эту мысли из головы. Ищите в задачах объекты, объединяйте их в классы. Придумывайте, как эти объекты будут воздействовать друг на друга
Ответ написан
LittleFatNinja
@LittleFatNinja
горе девелопер, любитель лютой садомии
в статичиском методе невозможно использовать $this, это не логично
подумай теперь что из этого выплывает

с помощью стат поля можно например считать общ кол-во обьектов даного класса
т к как поле $count единое для всех обьектов, создавая новый обьект мы можем просто увиличивать этот счечик и в любое время узнать значение счечика
class A {
  $x;
  static $count = 0;
  staric $className = "A";

  function __construct($x) {
    $this->x = $x;
    self::count += 1;
  }
}

$one = new A(5);
$two = new A(10);


$one->x;  // 5
$two->x;  // 10

A::count; //2

$two::className(); // A (Начиная с PHP 5.3.0)


(примеры образные)
Ответ написан
Ashlst
@Ashlst
Фанат эстетики и красивых решений.
Рекомендую почитать
ключевое слово «static»
Обычные свойства, не-static, присущи каждому объекту индивидуально (у этого автомобиля 4 колеса, а у того 1 уже сняли).
Статические свойства присущи самому классу, а не конкретным объектам (количество автомобилей на планете составляет ... штук, общее количество их колес составляет ... штук).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы