Ответы пользователя по тегу ООП
  • Что можно улучшить/исправить в классе (Singleton)?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    public static function getInstance(): self {
        if ( empty( self::$instance ) ) {
          self::$instance = new Config();
        }
    
        return self::$instance;
      }
    Ответ написан
    5 комментариев
  • Как должен называться и обязанности класса регистации, авторизации и прочего для пользователя?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Он должен называться UserRegistrationAndLoginAndOther. Круто звучит, правда?

    На самом деле смешивать это все плохая идея. Применяйте принцип единой ответственности.
    Ответ написан
    Комментировать
  • Как отследить вызов метода объекта PHP?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Можно и так. Статические методы сделайте private/protected. Используя PHPDoc укажите какие именно публичные методы доступны для вызова. Метод __callStatic будет перехватывать попытки вызова закрытых методов, вы сперва проверите наличие этого метода, потом сделаете нужную вам инициализацию и потом лишь передадите управление этому методу.

    Вот вам пример. Но я бы не советовал его использовать в реальных приложениях - он плохо пахнет.
    /**
     * @method static mixed one()
     * @method static mixed two()
     * @method static mixed three()
     */
    class Auto
    {
        protected static $instance;
    
        public static function __callStatic ( $name, $arguments )
        {
            if ( static::$instance === null ) {
                static::$instance = new static();
            }
            $method = "static_{$name}";
            if ( method_exists( static::$instance, $method ) ) {
                return call_user_func_array( [ static::$instance, $method ], $arguments );
            }
            throw new BadMethodCallException( '...' );
        }
    
        protected function static_one ()
        {
            echo 'Вызов метода ' . __METHOD__ . PHP_EOL;
        }
    
        protected function static_two ()
        {
            echo 'Вызов метода ' . __METHOD__ . PHP_EOL;
        }
    
        protected function static_three ()
        {
            echo 'Вызов метода ' . __METHOD__ . PHP_EOL;
        }
    }
    
    Auto::one(); # Вызов метода AutoCreate::static_one
    Auto::two(); # Вызов метода AutoCreate::static_two
    Auto::three(); # Вызов метода AutoCreate::static_three
    Ответ написан
    2 комментария
  • Как быть со статическими свойствами класса в PHP?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Правильно ли я понимаю, что при одновременном паралелльном обновлении нескольких элементов получится ситуация, что $disableHandlerForUpdateOther будет иметь, возможно, значение true в начале выполнения метода OnAfterIBlockElementUpdateHandler?


    В рамках одного запроса параллельного выполнения не будет. Вызовы произойдут поочередно. Первый вызов будет иметь false и выполнит содержимое метода. Остальные будут иметь true и ничего выполнить не смогут.

    > Пожалуйста, по легче с длинной названия переменных

    Куда лучше длинное и понятное название, чем короткое и непонятное. Основная идея в том, чтобы название метода\переменной полностью объясняло его содержимое\задачу.
    Ответ написан
  • Что такое static в ООП php?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Для доступа к статическим методам и членам класса
    class SomeClass {
    
        public $a = 'isObjectValue';
    
        static $b = 'isStaticValue';
    
    }
    
    echo SomeClass::$b; # isStaticValue
    
    $someClass = new SomeClass();
    echo $someClass->a; # isObjectValue


    к методам аналогично

    Внутри класса есть еще self\static, но это чуть другое
    Ответ написан
    Комментировать