Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с работой класса.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
MrSource
Отправлено: 31 Марта, 2011 - 21:27:08
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Янв. 2010  
Откуда: Украина, Донецк


Помог: 0 раз(а)




Здравствуйте, для примера, есть слудующий код:
PHP:
скопировать код в буфер обмена
  1. $core = new core;
  2. $core -> init_config();
  3.  
  4. registry::get('config');


класс core:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class core {
  3.  
  4.         function init_config() {
  5.                 include('config.php');
  6.                 registry::set('config', $config);
  7.         }
  8.  
  9. }


класс registry:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. Class Registry Implements ArrayAccess {
  4.        
  5.         private $vars = array();       
  6.  
  7.         function offsetExists($offset) {
  8.  
  9.                 return isset($this->vars[$offset]);
  10.  
  11.         }
  12.  
  13.  
  14.         function offsetGet($offset) {
  15.  
  16.                 return $this->get($offset);
  17.  
  18.         }
  19.  
  20.  
  21.         function offsetSet($offset, $value) {
  22.  
  23.                 $this->set($offset, $value);
  24.  
  25.         }
  26.  
  27.  
  28.         function offsetUnset($offset) {
  29.  
  30.                 unset($this->vars[$offset]);
  31.  
  32.         }
  33.  
  34.         function set($key, $var) {
  35.  
  36.                 if (isset($this->vars[$key]) == true) {
  37.  
  38.                 throw new Exception('Unable to set var `' . $key . '`. Already set.');
  39.  
  40.                 }
  41.  
  42.  
  43.                 $this->vars[$key] = $var;
  44.  
  45.                 return true;
  46.  
  47.         }
  48.  
  49.  
  50.         function get($key) {
  51.  
  52.                 if (isset($this->vars[$key]) == false) {
  53.  
  54.                         return null;
  55.  
  56.                 }
  57.  
  58.  
  59.                 return $this->vars[$key];
  60.  
  61.         }
  62.  
  63.  
  64.         function remove($var) {
  65.  
  66.                 unset($this->vars[$key]);
  67.  
  68.         }
  69.  
  70.  
  71. }
  72. ?>


config.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $config = array(
  3.   '123' => '321',
  4.   '321' => '123'
  5. );


по сути требуется получить доступ к массиву, но я получаю ошибку:
Цитата:
Fatal error: Using $this when not in object context in K:\xampp\htdocs\classes\registry.class.php on line 53


Если сделать так:
PHP:
скопировать код в буфер обмена
  1. $registry = new registry;
  2. $core = new core;
  3. $core -> init_config();
  4.  
  5. $registry -> get('config');
  6. или
  7. $registry['config']

то доступ к массиву я всёравно не получаю, но ошибка уже не возникает...

прошу вас помочь решить проблему...

(Отредактировано автором: 31 Марта, 2011 - 21:30:54)

 
 Top
OrmaJever Модератор
Отправлено: 31 Марта, 2011 - 22:38:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




6 строка в клссе core вызывает статический метод класа registry но как видим в 34 строке класа registry он не статический. А ошибка возникает из-за того что не создан обьект и $this не может использоватся без обьекта.
Можно передавать сылку на клас

PHP:
скопировать код в буфер обмена
  1. class core {
  2.  
  3.         function init_config(&$registry) {
  4.                 include('config.php');
  5.                 $registry->set('config', $config);
  6.         }
  7.  
  8. }

PHP:
скопировать код в буфер обмена
  1. $registry = new registry;
  2. $core = new core;
  3. $core -> init_config($registry);
  4.  
  5. $registry->get('config');


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
MrSource
Отправлено: 01 Апреля, 2011 - 15:28:14
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Янв. 2010  
Откуда: Украина, Донецк


Помог: 0 раз(а)




Но теперь, чтобы получить в любой функции доступ к регистру, нужно будет переменную $registry сделать глобальной в каждой функции.
Мне нужно, чтобы в любой функции можно было получить любое значение с помощью

(Отредактировано автором: 01 Апреля, 2011 - 15:31:03)

 
 Top
OrmaJever Модератор
Отправлено: 01 Апреля, 2011 - 15:56:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Ну если класс registry используется очень часто в core то можно обьект записать в свойство.
PHP:
скопировать код в буфер обмена
  1. class core {
  2.         public $reg = false;
  3.         function init_config() {
  4.                 include('config.php');
  5.                 $this->reg->set('config', $config);
  6.         }
  7.  
  8. }

PHP:
скопировать код в буфер обмена
  1. $registry = new registry;
  2. $core = new core;
  3. $core -> reg = $registry;
  4. $core -> init_config();
  5. $registry->get('config');

По-моему это лутше чем делать метод статическим. Растерялся

(Отредактировано автором: 01 Апреля, 2011 - 15:56:54)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
MrSource
Отправлено: 01 Апреля, 2011 - 16:02:55
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Янв. 2010  
Откуда: Украина, Донецк


Помог: 0 раз(а)




OrmaJever пишет:

Ну если класс registry используется очень часто в core то можно обьект записать в свойство.
PHP:
скопировать код в буфер обмена
  1. class core {
  2.         public $reg = false;
  3.         function init_config() {
  4.                 include('config.php');
  5.                 $this->reg->set('config', $config);
  6.         }
  7.  
  8. }

PHP:
скопировать код в буфер обмена
  1. $registry = new registry;
  2. $core = new core;
  3. $core -> reg = $registry;
  4. $core -> init_config();
  5. $registry->get('config');

По-моему это лутше чем делать метод статическим. Растерялся



Тоже идея, но если классов будет большое количество, передавать переменную в каждый из низ будет неудобно как-то.

Вообще цель - создать универсальный класс, чтобы был доступ к определённым параметрам из любой части скрипта(инклуд, класс, функция и т.д.) без лишних телодвижений.

(Отредактировано автором: 01 Апреля, 2011 - 16:04:20)

 
 Top
OrmaJever Модератор
Отправлено: 01 Апреля, 2011 - 16:42:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




хорашо можно зделать и так только тогда registry будет выглядеть так
Спойлер (Отобразить)

и все методы будут доступны registry::*
$this больше использовать нельзя.

(Отредактировано автором: 01 Апреля, 2011 - 16:43:55)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
MrSource
Отправлено: 01 Апреля, 2011 - 18:36:31
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Янв. 2010  
Откуда: Украина, Донецк


Помог: 0 раз(а)




OrmaJever пишет:
хорашо можно зделать и так только тогда registry будет выглядеть так
Спойлер (Отобразить)

и все методы будут доступны registry::*
$this больше использовать нельзя.


Конструкция:
Цитата:
self::vars[$offset]

не обрабатывается, я так понял, что через self::* нужное значение из массива не получить...
 
 Top
OrmaJever Модератор
Отправлено: 01 Апреля, 2011 - 18:43:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




ой я не заметил, статические переменые вызываются self::$var, а я везьде написал self::var
Исправьте .

(Отредактировано автором: 01 Апреля, 2011 - 18:47:11)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
MrSource
Отправлено: 01 Апреля, 2011 - 18:46:34
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Янв. 2010  
Откуда: Украина, Донецк


Помог: 0 раз(а)




OrmaJever пишет:
возможно я ошибся и строка с масивом будет выгляеть так


Не, там вообще синтаксическая ошибка вылетает:
Цитата:
Parse error: syntax error, unexpected '[', expecting '(' in K:\xampp\htdocs\classes\registry.class.php on line 9
 
 Top
OrmaJever Модератор
Отправлено: 01 Апреля, 2011 - 18:48:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




я исправил пост.
OrmaJever пишет:
ой я не заметил, статические переменые вызываются self::$var, а я везьде написал self::var


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
MrSource
Отправлено: 01 Апреля, 2011 - 18:51:35
Post Id



Гость


Покинул форум
Сообщений всего: 77
Дата рег-ции: Янв. 2010  
Откуда: Украина, Донецк


Помог: 0 раз(а)




OrmaJever пишет:
я исправил пост.
OrmaJever пишет:
ой я не заметил, статические переменые вызываются self::$var, а я везьде написал self::var


Я уже заметил, после того как ответил, кстати функции offset* не могут быть статическими Улыбка
(Добавление)
MrSource пишет:
OrmaJever пишет:
я исправил пост.
OrmaJever пишет:
ой я не заметил, статические переменые вызываются self::$var, а я везьде написал self::var


Я уже заметил, после того как ответил, кстати функции offset* не могут быть статическими Улыбка


OrmaJever, огромное спасибо за помощь Закатив глазки
 
 Top
JustUserR
Отправлено: 02 Апреля, 2011 - 19:10:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




OrmaJever пишет:
и все методы будут доступны registry::*
$this больше использовать нельзя.
В действительности использование определений функциональных объектов, осуществляемое в интерпретаторе языка PHP, в соответствии с поставленным условием целевой задачи, заключающеся в организаци инстанцированного получения ассоцированных значений информационных полей в пониженном базовом уровне трактования, предполагает возможность осуществление модификации информационной и действенной составляющей целевой координационной элементной области, вследствие чего в случае предшествующего обеспечения сопоставляемых объектных параметров в соответственном уровне трактования, возможно проведение решение оригинальной задачи


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB