Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
284 / 283 / 73
Регистрация: 06.05.2013
Сообщений: 1,613

Глобальный объект

03.07.2014, 09:40. Показов 3821. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Подскажите, как надо объявить класс data, так, что бы потом в начале документа сделать $data = new data и чтоб этот объект был доступен в любом подключённом файле и вообще где угодно.
Т.е. сейчас если я делаю include после $data = new data, то в подключаемом файле $data уже не существует. Подскажите как сделать глобальную переменную, доступную отовсюду.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.07.2014, 09:40
Ответы с готовыми решениями:

Глобальный массив сервер!
Доброго времени суток хотел поинтересоваться, вот есть глобальный масив сервер с него вынимаем $_SERVER получаем вот такую строку...

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

Глобальный объект
Как сделать такое: при запуске программы (т.е. появление Главной формы) я создаю объект (коллекция) на основе моего public класса. И этотот...

8
268 / 268 / 109
Регистрация: 22.08.2013
Сообщений: 907
03.07.2014, 10:31
PHP
1
2
3
4
5
6
7
8
9
10
11
class Data {
  static private $instance = null;
 
  static public function get() {
    if (self::$instance === null) {
      self::$instance = new Data();
    }
 
    return self::$instance;
  }
}
В нужном месте любого класса Data::get() и получите экземпляр (это не совсем, но Singleton-паттерн).

Цитата Сообщение от sMockingbird Посмотреть сообщение
Т.е. сейчас если я делаю include после $data = new data, то в подключаемом файле $data уже не существует.
Существует. Но я думаю то, что Вы используете её в методе класса, а в методе её нет (у методов своя область видимости).
2
284 / 283 / 73
Регистрация: 06.05.2013
Сообщений: 1,613
03.07.2014, 10:39  [ТС]
Razip,
Цитата Сообщение от Razip Посмотреть сообщение
В нужном месте любого класса Data::get() и получите экземпляр
мне необходимо ещё сделать метод set и устанавливать некоторые значения, которые запишу в этот объект.
Получив экземпляр, там будут ранее определённые значения?

Прошу прощения, если неясно выражаюсь, раньше с php постольку поскольку работал)

а что значит private и public?
своими словами, погуглил уже, но не уверен, что правильно понял.
Спасибо
0
268 / 268 / 109
Регистрация: 22.08.2013
Сообщений: 907
03.07.2014, 11:06
Цитата Сообщение от sMockingbird Посмотреть сообщение
мне необходимо ещё сделать метод set и устанавливать некоторые значения, которые запишу в этот объект.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Data {
  static private $instance = null;
 
  static public function get() {
    if (self::$instance === null) {
      self::$instance = new Data();
    }
 
    return self::$instance;
  }
 
  public function set($name, $value) {
    $this->$name = $value;
  }
}
Такое?

Цитата Сообщение от sMockingbird Посмотреть сообщение
а что значит private и public?
своими словами, погуглил уже, но не уверен, что правильно понял.
Спасибо
Private — означает то, что метод доступен исключительно из других методов того же класса:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
class Data {
  public function getHome() {
    return 'В доме: ' . implode(', ', $this->getHumans()) . '.';
  }
 
  private function getHumans() {
    return ['Вася', 'Маша', 'Марина', 'Джон', 'Леонардо'];
  }
}
 
$data = new Data();
print $data->getHome();
Public — метод доступен отовсюду.
1
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
 Аватар для Tatikoma
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
07.07.2014, 16:43
Цитата Сообщение от Razip Посмотреть сообщение
PHP
1
2
3
4
5
6
7
8
9
class Data {
* static private $instance = null;
static public function get() {
* * if (self::$instance === null) {
* * * self::$instance = new Data();
* * }
return self::$instance;
* }
}
В нужном месте любого класса Data::get() и получите экземпляр (это не совсем, но Singleton-паттерн).
Нет, это у вас еще не Singleton. Паттерн Singleton позволяет создание экземпляра класса только в одном месте кода.

Singleton будет выглядеть вот так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Data {
  private function __construct(){} // запрещает конструкцию new Data
  private function __clone(){} // запрещает конструкцию clone Data::get()
  private function __wakeup(){} // запрещает конструкцию unserialize(serialize(Data::get())), хотя я вообще __sleep бы запретил.
 
  static private $instance = null;
  
  static public function get() {
    if (self::$instance === null) {
      self::$instance = new Data();
    }
 
    return self::$instance;
  }
 
  public function set($name, $value) {
    $this->$name = $value;
  }
}
Извиняюсь за придирку, просто "но чему вы учите!?" ;-)
0
268 / 268 / 109
Регистрация: 22.08.2013
Сообщений: 907
07.07.2014, 18:07
Tatikoma, я и не отрицаю что это не полный Singleton, но просто клонирование и сериализация встречаются редко (по крайней мере мне).

P.S. что с репутацией? Надо поправить.
0
07.07.2014, 19:13

Не по теме:

Цитата Сообщение от Razip Посмотреть сообщение
P.S. что с репутацией? Надо поправить.
А что не так у меня с репутацией?

0
268 / 268 / 109
Регистрация: 22.08.2013
Сообщений: 907
07.07.2014, 20:54

Не по теме:

Tatikoma, я хотел повысить её, а кнопки «спасибо» нет. Я конечно не знаю, может быть это нововведение форума (которое позволяет только ТС'у повысить репутацию), но мало ли.



Добавлено через 9 минут

Не по теме:

ТС'у могу повысить (есть кнопка в сообщении). Странно.

0
07.07.2014, 20:55

Не по теме:

Это скорее форум не любит новичков которые только зарегились и сразу 30 сообщений нафлудили, пусть и по делу =)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.07.2014, 20:55
Помогаю со студенческими работами здесь

Глобальный объект
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Глобальный объект
Есть у меня приложение с формой Win Forms(CLR) Ну у меня весь код соответственно в .h файле. Как там объявить вектор, что-бы его можно было...

Глобальный объект
Можете объяснить такие вещи: 1)Название объекта в каждой среде разное?(то есть в ecmascript-object,в браузере-window) 2)Доступ к этим...

Динамический глобальный объект.
Здравствуйте. Пишу Auto-Clicker . Текущая версия содержит заранее созданный массив объектов класса "TClickBase" в каждом объекте...

Глобальный объект класса
Ребят, написал класс для реализации очереди на основе массива в отдельном юните, теперь мне нужно в другом получить объект класса, который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru