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

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

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

Например:

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


Какая в этом разница? Когда что лучше? Спасибо.
  • Вопрос задан
  • 1054 просмотра
Пригласить эксперта
Ответы на вопрос 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 уже сняли).
Статические свойства присущи самому классу, а не конкретным объектам (количество автомобилей на планете составляет ... штук, общее количество их колес составляет ... штук).
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы