Задать вопрос
kirill_782
@kirill_782
Днем я Маринетт

Как реализовать Registry?

Есть class
<?php

class Registry implements ArrayAccess {
    private $container = [];

    public function offsetSet($key, $value) {
        if (!$this->offsetExists($key))
            $this->container[$key] = $value;
        else
            trigger_error('Variable ' . $key . ' already defined', E_USER_WARNING);
    }

    public function offsetGet($key) {
        return $this->container[$key];
    }

    public function offsetExists($key) {
        return isset($this->container[$key]);
    }

    public function offsetUnset($key) {
        unset($this->container[$key]);
    }
}


Есть код
$registry = new Registry;

$registry['z'] = 123;
test();
function test () {
    $registry = new Registry;
    echo $registry['z'];
    echo 1;
}

По логике test должен выдать 1231. Но или я что-то не понимаю или class не рабочий
  • Вопрос задан
  • 141 просмотр
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Традиционно регистри выполняется в виде статики. все реализуется в 3 метода. Есть вообще мегапростой -
class Registry {

    private static $storage = array();

    public static function set($key,$value){
        self::$storage[$key] =$value;
    }

    public static function get($key){
        if(isset(self::$storage[$key]))
        return self::$storage[$key];
        else return false;
    }

    public static function getInstance(){
        return self::$storage;
    }

}
Ответ написан
Комментировать
Melkij
@Melkij
DBA для вашего PostgreSQL?
По логике test должен выдать 1231

Почему вы так считаете?
Каждый объект получает свой набор свойств, независимый от других объектов.

Если вам нужно свойство одно на все объекты этого класса - то вам нужны статические свойства static.

PS: и проверьте свой error_reporting. Похоже, вы не видите E_NOTICE
Ответ написан
Urichalex
@Urichalex
Кратко о себе)
В функции вы создаете новый экземпляр. Конечно там не будет ничего
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽