Задать вопрос
  • Почему автолоадер Yii2 не видит класс при обращении к его константе?

    Рабочий вариант:

    'container' => [
            'definitions' => [
                \app\components\Something::class => function() {
                    return new \app\components\Something([
                        'b' => \app\components\Something::A,
                    ]);
                },
            ],
        ],
    Ответ написан
    Комментировать
  • Как правильно инициализировать рекурсивные зависимости?

    Если получилась такая циклическая связь, скорее всего выбрана неудачная архитектура. Попробуйте решить задачу через третий класс как фасад над этими двумя.

    class Class1
    {
        public function doSomethingWithClass2Object(Class2 $obj2)
        {
        }
    }
    class Class2
    {
        public function doSomethingWithClass1Object(Class1 $obj1)
        {
        }
    }
    class ClassFacade
    {
        private Class1 $class1;
        private Class2 $class2;
    
        public function __construct()
        {
            $this->class1 = app(Class1::class);
            $this->class2 = app(Class2::class);
        }
    
        public function doSomething()
        {
        	$this->class1->doSomethingWithClass2Object($this->class2);
        	$this->class2->doSomethingWithClass1Object($this->class1);
        }
    }
    Ответ написан
    Комментировать
  • Notice: Undefined property: stdClass. в чём проблема?

    Если версия php >= 7.4, напишите так:
    ' . ($product->stars ?? 0) . '
    Если php < 7.4, тогда так:
    ' . (isset($product->stars) ? $product->stars : 0) . '

    А вообще проблема судя по всему в том, что на старом хостинге нотисы игнорировались на уровне конфигурации php, а на новом — нет.
    Если есть доступ к php.ini, можно установить там игнорирование нотисов:
    error_reporting = E_ALL & ~E_NOTICE
    Ответ написан
    Комментировать
  • Строка из БД как условие сравнения в if?

    class RuleHelper
    {
        /**
         * Checks rule for value
         * @param mixed $value value to check
         * @param string $rule rule for checking
         * @param array $args arguments for rule
         * @return bool
         */
        public static function check($value, string $rule, array $args): bool
        {
            switch($rule) {
                case '=':
                    if((string)$value === (string)$args[0]) {
                        return true;
                    }
                    break;
                case '!=':
                    if((string)$value !== (string)$args[0]) {
                        return true;
                    }
                    break;
                case '>':
                    if($value > $args[0]) {
                        return true;
                    }
                    break;
                case '>=':
                    if($value >= $args[0]) {
                        return true;
                    }
                    break;
                case '<':
                    if($value < $args[0]) {
                        return true;
                    }
                    break;
                case '<=':
                    if($value <= $args[0]) {
                        return true;
                    }
                    break;
                case 'between':
                    if($value >= $args[0] && $value <= $args[1]) {
                        return true;
                    }
                    break;
                case 'in':
                    if(in_array($value, $args[0])) {
                        return true;
                    }
                    break;
                case 'not in':
                    if(!in_array($value, $args[0])) {
                        return true;
                    }
                    break;
                case 'between strict':
                    if($value > $args[0] && $value < $args[1]) {
                        return true;
                    }
                    break;
            }
    
            return false;
        }
    }
    
    RuleHelper::check($operand1, $row['compareSign'], $operand2);
    Ответ написан
    Комментировать
  • Как парсить на php веб-сокеты?

    Здесь есть реализация websocket-клиента: https://github.com/Textalk/websocket-php
    Здесь примеры использования: https://github.com/Textalk/websocket-php/blob/mast...
    Ответ написан
    Комментировать