Ответы пользователя по тегу ООП
  • Как работает присвоение переменно объекта в php?

    Почитайте про zval и call-by-reference в PHP (основы подсчета ссылок).

    После присвоения нового значения свойству изначального объекта, в переменную $assigned помещается копия объекта, хранящегося в $instance до этого присвоения (передача по значению). Отсюда эти переменные ссылаются на 2 разных экземпляра класса. А переменная же $reference - является лишь ссылкой на $instance (передача по ссылке), поэтому если оригинал затереть - ссылка тоже затрется.
    Ответ написан
    Комментировать
  • Как правильно организовать ООП php

    1. mysql_real_escape_string не будет работать без ресурса подключения.
    2. забудьте про CAPSLOCK и почитайте, что такое camelCase, ваш код будет приятнее читать.
    3. зачем статичные методы?
    4. почитайте про паттерн (шаблон) проектирования - Singleton (одиночка), обычно объект Request реализуется именно так.
    5. зачем нужно наследование в 2 класса?
    6. вместо различных методов correct*, я бы переписал функцию получения следующим образом:
    const STRING = 1;
    const INT = 2;
    // ...
    function get($value, $default = null, $type = self::STRING) {
        if (! $value) {
            return $default;
        }
    
        switch ($type) {
            case self::STRING:
                $value = addslashes(trim(strip_tags($value)));
                break;
            case self::INT:
                $value = (int) $value;
                break;
            default:
                throw new Exception('Unknown type');
                break;
        }
    
        return $value;
    }
    Ответ написан
  • JavaScript, как получить переменную из одного класса в другой?

    Прямым вызовом:
    // 1.js
    var someObj = {
        value: 123
    };
    
    // 2.js
    var anotherObj = {
       move: function() {
           alert(someObj.value);
       }
    };


    Либо через dependency injection при инициализации объектов, в зависимости от того, как построена логика приложения. Мне нравится больше этот вариант:
    // 1.js
    function someObj() {}
    
    someObj.prototype.init = function() {
        this.value = 123;
    }
    
    // 2.js
    function anotherObj() {}
    
    anotherObj.prototype.init = function(dependentObj) {
        this.someObj = dependentObj;
        alert(this.someObj.value);
    }
    
    // index.html
    var obj1 = new someObj();
    obj1.init();
    var obj2 = new anotherObj();
    obj2.init(obj1);
    Ответ написан
    Комментировать