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
Форумы портала PHP.SU :: Версия для печати :: сомнительный класс stdClass
Форумы портала PHP.SU » PHP » Программирование на PHP » сомнительный класс stdClass

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

1. scuter - 15 Мая, 2008 - 23:08:06 - перейти к сообщению
в различных скриптах используются класс "stdClass",
суде по всему он уже стандартно присутствует в PHP,
но вот, что это за класс и почему в серьёзных CMS используются такие классы???
2. toorr2p - 10 Мая, 2010 - 23:26:08 - перейти к сообщению
Это объект в котором содержаться переменные в виде ключь=>значение, используеться повсеместно в 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
3. JustUserR - 11 Мая, 2010 - 10:37:32 - перейти к сообщению
scuter пишет:
В различных скриптах используются класс "stdClass",
суде по всему он уже стандартно присутствует в PHP,
но вот, что это за класс и почему в серьёзных CMS используются такие классы???
Это действительно стандартный класс и достаточно удобный контейнер - однако схожою функциональность динамического класса вы можете реализовать вами с помощью следующих групп функций http://php.su/functions/?page=cat_oop
4. zhirny - 13 Мая, 2015 - 12:46:15 - перейти к сообщению
назовите хотя бы одно преимущество создания объекта класс stdClass перед созданием обычного массива
5. Sail - 13 Мая, 2015 - 12:57:41 - перейти к сообщению
zhirny пишет:
назовите хотя бы одно преимущество создания объекта класс stdClass перед созданием обычного массива

Кавычки писать не требуется Улыбка
(Добавление)
Однако, сакральный смысл существования stdCalss - typecasting to object.
6. zhirny - 13 Мая, 2015 - 13:04:03 - перейти к сообщению
чем например обычный массив менее удобный контейнер?
7. esterio - 13 Мая, 2015 - 13:27:38 - перейти к сообщению
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);
8. zhirny - 13 Мая, 2015 - 13:40:33 - перейти к сообщению
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
9. esterio - 13 Мая, 2015 - 14:30:17 - перейти к сообщению
zhirny
PHP:
скопировать код в буфер обмена
  1. class Foo{}
  2. $foo = new Foo();
  3. echo ($foo instanceof stdClass)?'Y':'N';

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

Также к прочтению
http://krisjordan[dot]com/dynamic-pr[dot][dot][dot]hp-with-stdclass
10. Sail - 13 Мая, 2015 - 14:55:45 - перейти к сообщению
esterio пишет:
Также к прочтению
http://krisjordan.com/dynamic-properties-in-php-with-stdclass

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

Я-ж грю - всё дело в кавычках Закатив глазки
11. teddy - 13 Мая, 2015 - 18:17:52 - перейти к сообщению
zhirny пишет:
назовите хотя бы одно преимущество создания объекта класс stdClass перед созданием обычного массива

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

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

Если же есть сложная структура данных, возможно требующая дополнительную обработку, то массив самое оно, ну или ArrayObject/ArrayAccess например. Вообщем, хорошо освойте что из себя представляют объекты и массивы и выбирайте тот или иной инструмент когда на ваш взгляд он подходит лучше.
12. DeepVarvar - 13 Мая, 2015 - 20:33:34 - перейти к сообщению
http://forum.php.su/topic.php?fo...12858#1431512858 +1
И еще, для клиентских приложений может быть критично:
13. armancho7777777 - 14 Мая, 2015 - 20:59:56 - перейти к сообщению

Обращаю внимание, как в последнее время teddy стал излагать свои мысли )
Приятно читать.
+ 1
14. DeepVarvar - 14 Мая, 2015 - 21:18:53 - перейти к сообщению

Ну так, растёт жи
15. esterio - 16 Мая, 2015 - 03:15:08 - перейти к сообщению

И скоро задолбеться отвечать на сотню вторую глупых вопросов как и все и ити мимо. Хотя прогресс на лицо

 

Powered by ExBB FM 1.0 RC1