Как статический класс влияет на объект?

Discussion in 'PHP' started by roker777, 10 Dec 2019.

  1. roker777

    roker777 Member

    Joined:
    9 Nov 2009
    Messages:
    11
    Likes Received:
    14
    Reputations:
    2
    Подскажите как это называется и где подробнее про это почитать.
    Вот кусок кода:
    PHP:
    $instagram = new Instagram();
    Instagram::setProxy([
        
    'address' => '111.112.113.114',
        
    'port'    => '8080',
        
    'tunnel'  => true,
        
    'timeout' => 30,
    ]);
    // Request with proxy
    $account $instagram->getAccount('kevin');
    Instagram::disableProxy();
    // Request without proxy
    $account $instagram->getAccount('kevin');
    Каким образом вызов статических методов класса влияет на созданный объект?
     
  2. roker777

    roker777 Member

    Joined:
    9 Nov 2009
    Messages:
    11
    Likes Received:
    14
    Reputations:
    2
    Ответ, если кратко

    "Статические методы используются тогда, когда надо повлиять, грубо говоря, одновременно на все объекты."
     
  3. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    А вот и нет. Статические методы это методы которые могут быть вызваны без создания экземпляра класса - объекта.
     
    alexzir likes this.
  4. alexzir

    alexzir Well-Known Member

    Joined:
    29 Oct 2019
    Messages:
    971
    Likes Received:
    2,341
    Reputations:
    25
    Так это ж глобальные методы, а вопрос про статические :)
    Статические методы предопределены, их не переопределяют в процессе выполнения программы.
     
    #4 alexzir, 12 Dec 2019
    Last edited: 12 Dec 2019
    roker777 likes this.
  5. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    чтобы метод нельзя было переопределить он должен быть помечен как final, а не быть статическим. а так через рефлексию можно даже private метод сделать доступным при желании :)
     
    alexzir likes this.
  6. alexzir

    alexzir Well-Known Member

    Joined:
    29 Oct 2019
    Messages:
    971
    Likes Received:
    2,341
    Reputations:
    25
    Ну так в умелых руках и МПХ - балалайка :)
     
  7. roker777

    roker777 Member

    Joined:
    9 Nov 2009
    Messages:
    11
    Likes Received:
    14
    Reputations:
    2
    Чет я все обсуждение пропустил.

    Все правы, только о разных смыслах. Я, в начале, как раз хотел понять именно вот это:
    Я не знал этого свойства статических методов и свойств
     
  8. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    вот хороший щаблон(паттерн) для того чтобы понять зачем правильно использовать статические методы. singleton. иногда через этот паттерн делают подключение к базе данных чтобы гарантировано иметь только одно подключение
    по ссылке https://refactoring.guru/ru/design-patterns/php можно узнать больше

    <?php declare(strict_types=1);

    namespace DesignPatterns\Creational\Singleton;

    final class Singleton
    {
    private static ?Singleton $instance = null;

    /**
    * gets the instance via lazy initialization (created on first usage)
    */
    public static function getInstance(): Singleton
    {
    if (static::$instance === null) {
    static::$instance = new static();
    }

    return static::$instance;
    }

    /**
    * is not allowed to call from outside to prevent from creating multiple instances,
    * to use the singleton, you have to obtain the instance from Singleton::getInstance() instead
    */
    private function __construct()
    {
    }

    /**
    * prevent the instance from being cloned (which would create a second instance of it)
    */
    private function __clone()
    {
    }

    /**
    * prevent from being unserialized (which would create a second instance of it)
    */
    private function __wakeup()
    {
    }
    }
     
    roker777 likes this.