- Да върнеш Object или Array
WT форуми -> PHP MySQL ASP.NET -> Да върнеш Object или Array
Създайте нова тема Напишете отговор 
Автор Съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 121
Bonus: 235
Мнения: 3116
Мнение 07/03/2019 8:08 pm     Да върнеш Object или Array Отговорете с цитат


Здравейте Колеги,

В тази тема желая да Ви попитам за личното Ви отношение към връщаните от разни функции и методи стойности. С кое обичате да работите повече, като върнат резултат от даден метод/функция, обект или масив?

PHP code:

function x ()
{
return array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
}

function x2 ()
{
return (object)["Peter"=>"35", "Ben"=>"37", "Joe"=>"43"];
}


Напоследък доста коментираме този въпрос с приятели и ми е интересна и вашата гледна точка. Много зависи от случая, но по-често връщам масиви вместо обекти. В един проект пък ми се наложи доста обекти да връщам, като резултат и ми се струва, че кода става по-чист, но пък за сметка на това обсъждаме и това, че ако се връщат повече обекти вместо масиви пиковото използване на паметта се покачва. Вие какво мислите по казуса?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 56
Bonus: 112
Мнения: 749
Мнение 07/03/2019 8:33 pm      Отговорете с цитат


Ако видя такова нещо в код, директно уволнявам.

Масива трябва да си остане масив. Работата с масив е много по-лесна и разбираема. Когато работиш с обект(конвертиран масив) нещата могат да се оплескат жестоко и става страшно объркващо.

Обект се връща, ако е само инстанция на друг клас и искаш да работиш с методите му.

Можеш да върнеш масив от обекти, но не да конвертираш масив в обект. Просто трябва да си избиеш това нещо от главата.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 121
Bonus: 235
Мнения: 3116
Мнение 07/03/2019 8:46 pm      Отговорете с цитат


Revelation написа:
Ако видя такова нещо в код, директно уволнявам.

Масива трябва да си остане масив. Работата с масив е много по-лесна и разбираема. Когато работиш с обект(конвертиран масив) нещата могат да се оплескат жестоко и става страшно объркващо.

Обект се връща, ако е само инстанция на друг клас и искаш да работиш с методите му.

Можеш да върнеш масив от обекти, но не да конвертираш масив в обект. Просто трябва да си избиеш това нещо от главата.


Наистина е така и подкрепям мнението ти. Аз също смятам, че масива е по-лесен за обработка, но в много проекти виждам как са използвали stdClass, като връщан резултат и съм принуден да следвам тази омазия, като логика. Интересно ми е защо се прави така? Да кода изглежда с една идея по-добре четим след това, но не мога да го приема, като практика. Непонятна ми е логиката в изплюването на обект след обект от методи.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 160
Bonus: 319
Мнения: 1497
Мнение 07/03/2019 8:51 pm      Отговорете с цитат


Според мен проблемът тук идва оттам, че в PHP разликата в синтаксиса между обект/масив/hashmap е много малка, и много лесно превръщаш едното в другото, като вторите две дори съвпадат.

hashmap/масив е data structure - 'структура от данни', в математическия смисъл на 'релация' и 'редица'. Тоест това е място - контейнер с динамичен размер, в който слагаш и махаш неща.

Структура/обект/инстанция е нещо съвсем различно. Обектът е крайно множество хетерогенни елементи, т.е. имаш точно N променливи и константи, които стоят в него. Всяка има свой (фиксиран) тип, незадължително еднакъв или различен от останалите.

Шаблонът, или 'структурата' на един обект е ясна още по време на компилация - в случая, преди да се интерпретира кодът.

Може би PHP синтаксисът ти пречи да различаваш семантиката на двете (смисълът 'отзад'), защото преобразуването между двете е тривиално.

Използвай функционалностите на езика според предвидените им семантики, защото това е уговорка, която спазваш с останалите - и ако ти имаш предвид обект, а ползваш PHP'ския array, или обратното, ще стане мазало - най-малкото ще объркаш човека.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 121
Bonus: 235
Мнения: 3116
Мнение 07/03/2019 9:00 pm      Отговорете с цитат


anonimen написа:
Според мен проблемът тук идва оттам, че в PHP разликата в синтаксиса между обект/масив/hashmap е много малка, и много лесно превръщаш едното в другото, като вторите две дори съвпадат.

hashmap/масив е data structure - 'структура от данни', в математическия смисъл на 'релация' и 'редица'. Тоест това е място - контейнер с динамичен размер, в който слагаш и махаш неща.

Структура/обект/инстанция е нещо съвсем различно. Обектът е крайно множество хетерогенни елементи, т.е. имаш точно N променливи и константи, които стоят в него. Всяка има свой (фиксиран) тип, незадължително еднакъв или различен от останалите.

Шаблонът, или 'структурата' на един обект е ясна още по време на компилация - в случая, преди да се интерпретира кодът.

Може би PHP синтаксисът ти пречи да различаваш семантиката на двете (смисълът 'отзад'), защото преобразуването между двете е тривиално.

Използвай функционалностите на езика според предвидените им семантики, защото това е уговорка, която спазваш с останалите - и ако ти имаш предвид обект, а ползваш PHP'ския array, или обратното, ще стане мазало - най-малкото ще объркаш човека.


Разбирам разликите и преобразуването, но продължавам да не разбирам, защо някои програмисти изплюват от своите методи обекти вместо масив? С какво им е по-удобно да работят с обект вместо с масив и то в по-голям проект? Няма да споменавам имена или фракции от системата, ама масово в този проект се използваше тази практика и то от реномирана фирма. От там и с приятелите ми повдигнахме темата и всякакви доводи в + и - дадохме, но реално не си отговорихме с кое им е по-удобно да изплюват от някои методи - обекти.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 350
Bonus: 698
Мнения: 2664
Мнение 07/03/2019 9:06 pm      Отговорете с цитат


Хората, които кастват масив към обект, са същите хора, които си мислят, че пишат ООП, само защото са написали 10 функции wrap-нати в един клас.

За панделка са в неймспейс.

Ама аз не бих уволнила човека, а по-скоро бих му показала/обяснила/убедила защо да не се прави така. Smile

Ако споделиш кода, където си го видял, може да има друго обясниение/предназначение.

Може да е от JSON*, който е decode-нат, без втория аргумент (който форсва ползването на асоциативен масив), та за това е някакъв "обект".


Ако е директно (object)['pesho'=>31], рип за програмистчету. Crying or Very sad

*JSON as in JavaScript Object Notation, да не се бърка със холивудската звезда:

Да върнеш Object или Array

ПС: Тема за есе: "Живота и творчеството на един PHP Обект",

$x = new __PHP_Incomplete_Class;
var_dump(gettype($x)); // string(6) "object"
var_dump(is_object($x)); // bool(false)
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 121
Bonus: 235
Мнения: 3116
Мнение 07/03/2019 9:15 pm      Отговорете с цитат


Fakeheal написа:
Хората, които кастват масив към обект, са същите хора, които си мислят, че пишат ООП, само защото са написали 10 функции wrap-нати в един клас.

За панделка са в неймспейс.

Ама аз не бих уволнила човека, а по-скоро бих му показала/обяснила защо да не се прави така. Smile

Ако споделиш кода, където си го видял, може да има друго обясниение/предназначение.

Може да е от JSON*, който е decode-нат, без втория аргумент (който форсва ползването на асоциативен масив), та за това е някакъв масив.

Ако е директно (object)['pesho'=>31], рип за програмистчету. Crying or Very sad

JSON, да не се бърка със холивудската звезда:

Да върнеш Object или Array


Не мога да постна от кода, по ред независещи от мен причини, но нямаше никакво ОЧЕВАДЕЩО налагане на такъв тип връщане. Впрочем само за примера сложих (object) масив, а в системата бяха си поиграли да използват new stdClass, което правеше същото, като моя пример (ама по-сложно). Да си кажа честно умувам и не достигам до разумен отговор. Лошото е, че екип от програмисти е създал това творческо произведение.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 56
Bonus: 112
Мнения: 749
Мнение 08/03/2019 9:30 pm      Отговорете с цитат


Fakeheal написа:

Ама аз не бих уволнила човека, а по-скоро бих му показала/обяснила/убедила защо да не се прави така. Smile


Във фирмата, която работя имаме същите изпълнения. За жалост не мога да налея акъл на човека, който е писал системата преди време, но с радост бих му забил няколко шамара. Very Happy
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 121
Bonus: 235
Мнения: 3116
Мнение 10/03/2019 9:14 am      Отговорете с цитат


Ако се плюват обекти вместо масиви само защото виждаш ли е ООП структура за работа с резултата, то логиката на някой е строго разрушена. Умувахме с приятели и не достигаме до нормален отговор. Жалко, че не мога да Ви споделя от кода. Красиво се е получил, но е тежък и системата бави. Най-просто казано трябва да се пренаписва....
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети