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 :: Последовательный вызов свойств класса [2]

 PHP.SU

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


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

> Описание: Согласно массиву
DelphinPRO
Отправлено: 02 Июля, 2014 - 00:53:41
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




LIME пишет:
DelphinPRO я тя щас ударю)

не надо Улыбка

я просто не понимаю до конца, что нужно ТС
Если нужен "текущий интерфейс" а ля jqwery, то просто возвращаем в конце методотоф $this
если то, что я написал выше, то, извиняйте, но объект создавайте (или берите где-то готовый). За что меня ударять-то? Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
qtk
Отправлено: 02 Июля, 2014 - 09:30:10
Post Id


Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Май 2012  


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




OrmaJever пишет:
class MyClass
{
    public $val = 5;
 
    public function __get( $name ) {
        return new MyClass();
    }
}
 
$class = new MyClass();
echo $class->var->val;
echo $class->var->var->var->val; // Улыбка
это не то, мне нужно что бы ключи были согласно массиву. Конечно может я занимаюсь ерундой, но данную реализацию я видел в Zend, класс Zend_Config
 
 Top
OrmaJever Модератор
Отправлено: 02 Июля, 2014 - 10:04:32
Post Id



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


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


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




qtk я уверен что там не было массива, там рекурсивно создаются сразу обьекты, как например это делает json_decode. А хотеть что бы массив в классе вызывался как обьект глупо


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
qtk
Отправлено: 02 Июля, 2014 - 10:09:34
Post Id


Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Май 2012  


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




Нет там массив конфигурации передаётся в класс, затем создаётся объект и вызываются последовательно свойства согласно ключам массива.
(Добавление)
[url]
http://framework.zend.com/manual/1.12/ru/zend.config.introduction.html[/url]
 
 Top
armancho7777777 Супермодератор
Отправлено: 02 Июля, 2014 - 11:38:37
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




qtk, вот пример:
PHP:
скопировать код в буфер обмена
  1.  
  2. define('DIR_ROOT', '/home/');
  3.  
  4. class MyConfig
  5. {
  6.     const DIR_CONIG = 'confg/';
  7.  
  8.     /**
  9.      * @var array
  10.      */
  11.     private static $_configList = array();
  12.  
  13.     /**
  14.      * @var array
  15.      */
  16.     private $_config = array();
  17.  
  18.     /**
  19.      * @var self
  20.      */
  21.     private $_owner;
  22.    
  23.  
  24.     private function __construct(array $config, self $owner = null)
  25.     {
  26.         if(is_null($owner)) {
  27.             $owner = $this;
  28.         }
  29.        
  30.         $this->_config = $config;
  31.         $this->_owner = $owner;
  32.     }
  33.  
  34.     public function __get($prop)
  35.     {
  36.         if(array_key_exists($prop, $this->_config))
  37.         {
  38.             if(is_array($this->_config[$prop]))
  39.             {
  40.                 $this->_config[$prop] = new self(
  41.                     $this->_config[$prop],
  42.                     $this->_owner
  43.                 );
  44.             }
  45.            
  46.             return $this->_config[$prop];
  47.         }
  48.     }
  49.    
  50.     /**
  51.      * @param string $fileName
  52.      * @return self
  53.      */
  54.     public static function load($fileName)
  55.     {
  56.         if(!array_key_exists($fileName, self::$_configList)) {
  57.             self::$_configList[$fileName] = new self(
  58.                 include(DIR_ROOT . self::DIR_CONIG . $fileName . '.php')
  59.             );
  60.         }
  61.        
  62.         return self::$_configList[$fileName];
  63.     }
  64. }


Файл /home/confg/my_config.php:
PHP:
скопировать код в буфер обмена
  1. return array(
  2.     'prop_list' => array(
  3.         'prop' => 111
  4.     )
  5. );
  6.  


PHP:
скопировать код в буфер обмена
  1. var_dump(MyConfig::load('my_config')->prop_list->prop);


Различные проверки упущены.

(Отредактировано автором: 02 Июля, 2014 - 11:54:02)

 
 Top
LIME
Отправлено: 02 Июля, 2014 - 11:51:41
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




new self это скорее зря
зачем все копировать
лучше использовать отдельный класс в котором будет только ссылка на данные(или копия) и __get
 
 Top
esterio
Отправлено: 02 Июля, 2014 - 11:53:22
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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





armancho7777777
спасибо, а то увидел новое слово для себя и нагуглит такое
http://habrahabr[dot]ru/post/64101/
сразу же подумал какое отношение к теме оно имеет
 
 Top
armancho7777777 Супермодератор
Отправлено: 02 Июля, 2014 - 11:55:37
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




esterio, это ник ТС.
 
 Top
OrmaJever Модератор
Отправлено: 02 Июля, 2014 - 12:03:29
Post Id



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


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


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




я бы написал так
PHP:
скопировать код в буфер обмена
  1. class MyClass
  2. {
  3.     public function __construct( array $array ) {
  4.         $this->load( $array );
  5.     }
  6.  
  7.     public function load( array $array ) {
  8.         foreach( $array as $k => $v) {
  9.             if(is_array($v)) {
  10.                 $this->$k = new self( $v );
  11.             } else {
  12.                 $this->$k = $v;
  13.             }
  14.         }
  15.     }
  16. }
  17.  
  18. $class = new MyClass( ['key1' => 'val1', 'key2' => ['key3' => 'val3','key4' => 'val4']] );
  19. var_dump($class->key2->key3);


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
qtk
Отправлено: 02 Июля, 2014 - 16:54:28
Post Id


Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Май 2012  


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




Огромно всем спасибо кто принимал участие! Воспользуюсь кодом OrmaJever, код работает так, как я и хотел.
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB