ФорумПрограммированиеPHP для идиотов → unset, $class1 = $class2;

unset, $class1 = $class2;

  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 5 июня 2010 г. 9:36

    $class1 = new Class;
    $class2 = $class1;
    unset ($class1);

    Сласс 2 при этом не ансетается и не должен. А как сделать, чтобы ансетнулся.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 5 июня 2010 г. 9:41, спустя 5 минут 9 секунд

    класс2 = &class1;
    Спустя 14 сек.
    хотя хуй знает может и так не сканает) по сути и так ссылка является
    Сапожник без сапог
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 5 июня 2010 г. 9:52, спустя 10 минут 24 секунды

    phpdude, не сканает. Он тупа ссылку удалит.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 5 июня 2010 г. 9:56, спустя 4 минуты 38 секунд

    а в чем вообще задача то?
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 5 июня 2010 г. 10:05, спустя 8 минут 51 секунду

    забавная задача. Я не знаю как это сделать. Может только через get_defined_vars и в цикле сравнивать?
    Спустя 53 сек.
    class myClass {}

    $a = new myClass();
    var_dump($a);
    $b =& $a;
    $a = NULL;
    var_dump($b);

    Спустя 77 сек.
    страннаблять, без '&' не работает. И поцчему? оно ж объекты и так by reference передает
    Спустя 11 сек.
    очередная нелогичность пыхи
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 5 июня 2010 г. 10:16, спустя 10 минут 49 секунд

    phpdude,
    <?php
    /**
    * Статический класс, который служит для глобализации классов.
    *
    * @author vaseninm
    * @version 1.0
    *
    */
    class Pixelio {


    static private $_registry;

    /**
    * Доступ к классу. Получение переменных.
    * @param string $name - имя класа для доступа
    * @return object
    */
    public static function get($name) {
    return self::$_registry[$name] ? self::$_registry[$name] : NULL;
    }

    /**
    * Записываем переменную в хранилище
    * @param string $name Имя для обращения Pixelio::get('name')
    * @param object $var Объект класса, к которому мы будем обращатся
    * @return object
    */
    public static function set($name, $var) {
    if (isset(self::$_registry[$name])) {
    throw new Exception ('Такой объект уже записан.');
    } else {
    self::$_registry[$name] = $var;
    return $var;
    }
    }

    /**
    *
    * Уничтожаем объект
    * @param string $name Имя класса, который нужно уничтожить.
    */
    public static function destroy ($name) {
    unset(self::$_registry[$name]);
    return true;
    }

    }

    $db = Pixelio::set ('db', New MYSQL); //В $дб запишем для удобства юзания
    Pixelio::destroy ('db');

    ?>


    Спустя 19 сек.
    Абырвалг, ща посмарю. Сеньк.
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 5 июня 2010 г. 10:23, спустя 7 минут 23 секунды

    Бля, не работает, как Главрыба сказал.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 5 июня 2010 г. 10:27, спустя 3 минуты 26 секунд


    Бля, не работает, как Главрыба сказал.
    ты дестрой пытаешься сделать? так вызови деструктор …
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 5 июня 2010 г. 10:31, спустя 4 минуты 30 секунд

    как это не работает?
    object(myClass)[1]

    null
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 5 июня 2010 г. 10:39, спустя 7 минут 17 секунд

        public static  function destroy ($name) {
    self::$_registry[$name]->__destruct();
    }

    Дуд, так? В итоге два раза деструктор выполняется.
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 5 июня 2010 г. 10:48, спустя 9 минут 9 секунд

    Абырвалг,
        public static function destroy ($name) {
    self::$_registry[$name] = NULL;
    return true;
    }

    $tpl =& Pixelio::set ('tpl', New Template);
    Pixelio::desroy('tpl');

    вардамп от self::$_registry[$name] - нул
    вардамп от тпл - обькт
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 5 июня 2010 г. 11:16, спустя 28 минут 28 секунд

    попробуй так
    public static  function &get($name)
    {
    return self::$_registry[$name] ? self::$_registry[$name] : NULL;
    }

    и еще потом
    $a =& Pixelio::get();
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 5 июня 2010 г. 11:46, спустя 29 минут 22 секунды

    Спасибо, Кость) Помогло!
    Спустя 32 сек.
    Ну, да. А пхп то реално нелогичен.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 5 июня 2010 г. 11:49, спустя 3 минуты 41 секунду


    Спасибо, Кость) Помогло!
    Спустя 32 сек.
    Ну, да. А пхп то реално нелогичен.
    почему нелогичен? просто у тебя задача нелогичная. если бы у тебя сделали копию паспорта и уничтожили ее, то твой паспорт бы тоже уничтожился? ахуенно логично! все логично и очевидно. ансет подтирает ссылку на объект до тех пор, пока ссылка не является жесткой (обзовем это так), либо пока колво ссылок > 1
    Сапожник без сапог
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 5 июня 2010 г. 11:53, спустя 3 минуты 17 секунд

    Про ансет я ниче не говорю.
    Я имеюю ввиду про то, что $class1 = NULL работает если $class2 =& $class1. Но при этом не работает при простом равно. Но ведь если $class1 = $class2 и при этом класс 2 - обьект, то ссылка и создается.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!