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 :: сомнительный класс stdClass

 PHP.SU

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


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

> Без описания
scuter
Отправлено: 15 Мая, 2008 - 23:08:06
Post Id



Посетитель


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


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




в различных скриптах используются класс "stdClass",
суде по всему он уже стандартно присутствует в PHP,
но вот, что это за класс и почему в серьёзных CMS используются такие классы???
 
 Top
toorr2p
Отправлено: 10 Мая, 2010 - 23:26:08
Post Id


Новичок


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


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




Это объект в котором содержаться переменные в виде ключь=>значение, используеться повсеместно в Joomla. Например при передаче параметров-ностройки в модуль, например вот в таком виде:

PHP:
скопировать код в буфер обмена
  1.  
  2. JParameter Object ( [_raw] => source_sec=12, 9:34, 9:35, 10 nametext=Latest template=default.php [_xml] => [_elements] => Array ( ) [_elementPath] => Array ( [0] => W:\home\localhost\www\funky_dyk\libraries\joomla\html\parameter\element ) [_defaultNameSpace] => _default [_registry] => Array ( [_default] => Array ( [data] => stdClass Object ( [source_sec] => 12, 9:34, 9:35, 10 [nametext] => Latest [template] => default.php ) ) ) [_errors] => Array ( ) )
  3.  


И передается в функции как аргумент, где обробатывается например через foreach();

здесь можите посмотреть как из обычного массива преобразовать данные в объект:

http://cleverscript[dot]ru/index.php[dot][dot][dot]ions/20-stdclass
 
 Top
JustUserR
Отправлено: 11 Мая, 2010 - 10:37:32
Post Id



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


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


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




scuter пишет:
В различных скриптах используются класс "stdClass",
суде по всему он уже стандартно присутствует в PHP,
но вот, что это за класс и почему в серьёзных CMS используются такие классы???
Это действительно стандартный класс и достаточно удобный контейнер - однако схожою функциональность динамического класса вы можете реализовать вами с помощью следующих групп функций http://php.su/functions/?page=cat_oop


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
zhirny
Отправлено: 13 Мая, 2015 - 12:46:15
Post Id


Новичок


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


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




назовите хотя бы одно преимущество создания объекта класс stdClass перед созданием обычного массива

(Отредактировано автором: 13 Мая, 2015 - 12:46:38)

 
 Top
Sail
Отправлено: 13 Мая, 2015 - 12:57:41
Post Id



Участник


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


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




zhirny пишет:
назовите хотя бы одно преимущество создания объекта класс stdClass перед созданием обычного массива

Кавычки писать не требуется Улыбка
(Добавление)
Однако, сакральный смысл существования stdCalss - typecasting to object.

(Отредактировано автором: 13 Мая, 2015 - 13:03:47)

 
 Top
zhirny
Отправлено: 13 Мая, 2015 - 13:04:03
Post Id


Новичок


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


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




чем например обычный массив менее удобный контейнер?
 
 Top
esterio
Отправлено: 13 Мая, 2015 - 13:27:38
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. class Bar extends stdClass {}
  2.  
  3. function Foo(Bar $bar)
  4. {
  5.     //
  6. }
  7.  
  8. $bar = new Bar();
  9. $bar->foo = 'baz';
  10. Foo($bar);
 
 Top
zhirny
Отправлено: 13 Мая, 2015 - 13:40:33
Post Id


Новичок


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


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




esterio пишет:
PHP:
скопировать код в буфер обмена
  1. class Bar extends stdClass {}
  2.  
  3. function Foo(Bar $bar)
  4. {
  5.     //
  6. }
  7.  
  8. $bar = new Bar();
  9. $bar->foo = 'baz';
  10. Foo($bar);


ладно, а если так чем плохо:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Bar {}
  3.  
  4. function Foo(Bar $bar)
  5. {
  6.     //
  7. }
  8.  
  9. $bar = new Bar();
  10. $bar->foo = 'baz';
  11. Foo($bar);


то есть не расширяемся от этого stdClass

(Отредактировано автором: 13 Мая, 2015 - 13:41:31)

 
 Top
esterio
Отправлено: 13 Мая, 2015 - 14:30:17
Post Id



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


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


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




zhirny
PHP:
скопировать код в буфер обмена
  1. class Foo{}
  2. $foo = new Foo();
  3. echo ($foo instanceof stdClass)?'Y':'N';

stdClass являеться базовым классом. Поэтому даже если явно не указать наследование от него, оно все равно будет

Также к прочтению
http://krisjordan.com/dynamic-properties-in-php-with-stdclass

(Отредактировано автором: 13 Мая, 2015 - 14:31:46)

 
 Top
Sail
Отправлено: 13 Мая, 2015 - 14:55:45
Post Id



Участник


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


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




esterio пишет:
Также к прочтению
http://krisjordan.com/dynamic-properties-in-php-with-stdclass

Улыбка
Цитата:
One way is to use array, but this requires quoting all keys.

Я-ж грю - всё дело в кавычках Закатив глазки
 
 Top
teddy
Отправлено: 13 Мая, 2015 - 18:17:52
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


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




zhirny пишет:
назовите хотя бы одно преимущество создания объекта класс stdClass перед созданием обычного массива

Массив и объект это разные типы данных, каждый из которых имеет свое поведение и область применения. Исходя из этого можно сделать вывод, что ваш вопрос некорректный. Массив не является заменой объекту-пустышке, точно так же, объект-пустышка не является заменой массиву.

В зависимости от ситуации может быть удобно работать как и с stdclass, так и с массивом. Просто нужно понимать, что в случае необходимости изменять данные по ссылке внутри простого контейнера, через объект-пустышку это будет сделать удобнее. В случае же с массивом, придется извращаться с явными ссылками.

Если же есть сложная структура данных, возможно требующая дополнительную обработку, то массив самое оно, ну или ArrayObject/ArrayAccess например. Вообщем, хорошо освойте что из себя представляют объекты и массивы и выбирайте тот или иной инструмент когда на ваш взгляд он подходит лучше.
 
 Top
DeepVarvar Супермодератор
Отправлено: 13 Мая, 2015 - 20:33:34
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




http://forum.php.su/topic.php?fo...12858#1431512858 +1
И еще, для клиентских приложений может быть критично:
 
 Top
armancho7777777 Супермодератор
Отправлено: 14 Мая, 2015 - 20:59:56
Post Id



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


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


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





Обращаю внимание, как в последнее время teddy стал излагать свои мысли )
Приятно читать.
+ 1

(Отредактировано автором: 14 Мая, 2015 - 21:02:44)

 
 Top
DeepVarvar Супермодератор
Отправлено: 14 Мая, 2015 - 21:18:53
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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





Ну так, растёт жи
 
 Top
esterio
Отправлено: 16 Мая, 2015 - 03:15:08
Post Id



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


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


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





И скоро задолбеться отвечать на сотню вторую глупых вопросов как и все и ити мимо. Хотя прогресс на лицо
 
 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