অ্যারের পরিবর্তে অবজেক্ট কেন?


84

আমি ওয়ার্ডপ্রেসে অনেক কাজ করি এবং আমি লক্ষ্য করেছি যে অ্যারের চেয়ে অনেক বেশি ফাংশন অবজেক্টগুলি ফিরিয়ে দেয়। আপনি সুনির্দিষ্টভাবে অ্যারে না চাইলে ডাটাবেস ফলাফলগুলি বস্তু হিসাবে ফিরে আসে as ত্রুটিগুলি বস্তু হিসাবে ফিরে আসে। ওয়ার্ডপ্রেসের বাইরে বেশিরভাগ এপিআই আপনাকে অ্যারের পরিবর্তে একটি বস্তু দেয়।

আমার প্রশ্ন, তারা অ্যারের পরিবর্তে অবজেক্টগুলি কেন ব্যবহার করবে? বেশিরভাগ অংশে এটি খুব বেশি গুরুত্ব দেয় না, তবে কিছু ক্ষেত্রে আমি কেবল প্রক্রিয়া করাই নয় তবে মাথা ঘিরে রাখি এমন বস্তুগুলি আরও শক্ত। কোনও বস্তু ব্যবহারের জন্য পারফরম্যান্সের কারণ আছে?

আমি একজন স্ব-শিক্ষিত পিএইচপি প্রোগ্রামার। আমি একটি উদার আর্ট ডিগ্রি পেয়েছি। সুতরাং আমি কম্পিউটার বিজ্ঞানের একটি মৌলিক দিক অনুপস্থিত থাকলে আমাকে ক্ষমা করুন। ;)


4
আমি অবজেক্টগুলির অসুবিধাগুলির বিষয়ে এই বিষয়ে আগ্রহী , যেমন তাদের ব্যবহার করতে সক্ষম না হওয়া count()বা array_*()তাদের উপর ফাংশন করা (অন্তত কী => মান ডেটা সংরক্ষণ / ফিরিয়ে দেওয়ার ক্ষেত্রে)। কেউ এটি উল্লেখ করার মতো মনে হচ্ছে না, বা আমি কিছু মিস করছি?
ওয়েসলি মার্চ

8
গণনাযোগ্য বা আইট্রেটার ইন্টারফেস প্রয়োগ করে অবজেক্টগুলি গণনাযোগ্য এবং পুনরাবৃত্ত হওয়া যায়। পাশাপাশি php.net/manual/en/book.spl.php দেখুন ।
সিমশান

যদি এসপিএল ইনস্টল করা থাকে এবং আপনি যদি আপনার অবজেক্ট-শ্রেণীর জন্য ইন্টারফেস গণনাযোগ্য প্রয়োগ করেন তবে আপনি count()কোনও বস্তুতে কল করতে পারেন ।
কেউ এসই থেকে দূরে সরে যায় না

4
অনেক ক্ষেত্রে, একটি অ্যারে এমনকি অর্থবোধ করে না কারণ আপনি কোনও বস্তুর সংগ্রহ বা এক ধরণের সংগ্রহ যা সহজে অ্যারে দিয়ে অনুকরণ করে না return আপনার যখন অন্য মানগুলির ক্রম রয়েছে এবং কোনও অতিরিক্ত শব্দার্থবিজ্ঞান যুক্ত নেই, তখন godশ্বরের দোহাই দিয়ে একটি অ্যারে ফিরিয়ে দেন - তবে আপনি দেখতে পাবেন যে এটি খুব কমই ঘটে।

8
@ ডেলান এবং অন্যান্য: দয়া করে নোট করুন যে @ ডেনিস সাহসী অ্যারে , (ওরফে ডিকোরিয়ানস , ওরফে ম্যাপস) সম্পর্কে কথা বলছেন , সাধারণ (পূর্ণসংখ্যার সূচক) অ্যারে নয়। এগুলি পিএইচপি এর মূল বৈশিষ্ট্য, এবং গতিশীল ক্লাস ( stdClass) হিসাবে কম-বেশি একই উদ্দেশ্যে পরিবেশন করে । আমি নিশ্চিত নই যে এই প্রশ্নের উত্তর আছে "
অন্যথায়

উত্তর:


63

এই কারণগুলির কারণেই আমি সাধারণভাবে বস্তুগুলিকে পছন্দ করি:

  • অবজেক্টগুলিতে কেবল ডেটাই নয়, কার্যকারিতাও রয়েছে।
  • অবজেক্টগুলির (বেশিরভাগ ক্ষেত্রে) একটি পূর্বনির্ধারিত কাঠামো থাকে। এটি এপিআই ডিজাইনের জন্য খুব দরকারী। তদতিরিক্ত, আপনি জনসাধারণ, সুরক্ষিত বা ব্যক্তিগত হিসাবে সম্পত্তি সেট করতে পারেন।
  • অবজেক্টগুলি আরও ভাল ফিট অবজেক্ট ওরিয়েন্টেড ডেভলপমেন্ট।
  • বেশিরভাগ আইডিইতে স্বতঃপূরণ কেবল বস্তুর জন্য কাজ করে।

এখানে কিছু পড়ার বিষয়:


4
প্রথম লিঙ্কটি ভাল লাগছে না? আমার অর্থ এটি কাজ করে তবে একটি অন্য আর্টিকেলে নিয়ে যায়
জিও

24

আপনি সম্ভবত বেশ কয়েক বছর ধরে কোনও বৃহত সফ্টওয়্যার প্রকল্পে কাজ না করা পর্যন্ত এটি সম্ভবত আপনি গভীরভাবে বুঝতে যাচ্ছেন না isn't অনেক নতুন কম্পিউটার বিজ্ঞান মেজর আপনাকে সমস্ত সঠিক শব্দের সাথে একটি উত্তর দেবে (এনক্যাপসুলেশন, ডেটা সহ কার্যকারিতা এবং রক্ষণাবেক্ষণযোগ্যতা) তবে সমস্ত জিনিস কেন রাখা ভাল তা খুব কমই বুঝতে পারবেন।

আসুন কয়েকটি উদাহরণ দিয়ে চলুন।

  • যদি অ্যারেগুলি ফেরত দেওয়া হয়, তবে হয় সমস্ত মানকে সামনের দিকে গণনা করতে হবে বা প্রচুর পরিমাণে খুব কম মান ফিরিয়ে নেওয়া দরকার যা দিয়ে আপনি আরও জটিল মানগুলি তৈরি করতে পারেন।

ওয়ার্ডপ্রেস পোস্টগুলির একটি তালিকা ফিরে আসে এমন একটি এপিআই পদ্ধতি সম্পর্কে চিন্তা করুন। এই পোস্টগুলির সকলের লেখক রয়েছে, লেখকের নাম রয়েছে, ই-মেইল ঠিকানা রয়েছে, এমনকি তাদের জীবনী সহ প্রোফাইলও রয়েছে।

আপনি যদি অ্যারেতে সমস্ত পোস্ট ফিরিয়ে দিচ্ছেন তবে আপনাকে পোস্ট আইডির একটি অ্যারে ফিরিয়ে দেওয়ার ক্ষেত্রে নিজেকে সীমাবদ্ধ করতে হবে:

[233, 41, 204, 111]

বা এমন বিশাল কিছু অ্যারে ফিরে পাওয়া যা দেখে মনে হচ্ছে:

[ title: 'somePost', body: 'blah blah', 'author': ['name': 'billy', 'email': 'bill@bill.com', 'profile': ['interests': ['interest1', 'interest2', ...], 'bio': 'info...']] ]
[id: '2', .....]]

আইডির তালিকা ফিরিয়ে দেওয়ার প্রথম ক্ষেত্রেটি আপনার পক্ষে খুব কার্যকর নয় কারণ তারপরে সেই পোস্টটি সম্পর্কে কিছু তথ্য পেতে আপনাকে প্রতিটি আইডির জন্য একটি API কল করতে হবে।

দ্বিতীয় ক্ষেত্রেটি আপনার 90% সময়ের প্রয়োজনের চেয়ে আরও বেশি তথ্য টানবে এবং আরও বেশি কাজ করবে (বিশেষত যদি ক্ষেত্রগুলির মধ্যে কোনও একটি নির্মাণে খুব জটিল হয়)।

অন্যদিকে কোনও অবজেক্ট আপনাকে আপনার প্রয়োজনীয় সমস্ত তথ্যে অ্যাক্সেস সরবরাহ করতে পারে তবে বাস্তবে এখনও সেই তথ্যটি টানেনি। ক্ষেত্রের মান নির্ধারণ করা কোনও অবজেক্ট ব্যবহার করার সময় অলসভাবে করা যেতে পারে (অর্থাত্ যখন মানটির প্রয়োজন হয় এবং আগে নয়)।

  • অ্যারে উদ্দেশ্যগুলির চেয়ে বেশি ডেটা এবং ক্ষমতা প্রকাশ করে

বিশাল অ্যারে ফিরে আসার উদাহরণে ফিরে যান। এখন কেউ সম্ভবত এমন একটি অ্যাপ্লিকেশন তৈরি করতে পারেন যা পোস্ট অ্যারের অভ্যন্তরে প্রতিটি মানকে পুনরুক্ত করে এবং মুদ্রণ করে। যদি সেই পোস্ট অ্যারেতে কেবলমাত্র একটি অতিরিক্ত উপাদান যুক্ত করতে যদি API আপডেট হয় তবে অ্যাপ্লিকেশন কোডটি ভেঙে চলেছে কারণ এটি এমন কোনও নতুন ক্ষেত্রটি মুদ্রণ করবে যা এটি সম্ভবত না করা উচিত probably পোস্টের অ্যারেতে আইটেমগুলির ক্রম যদি এপিআই পরিবর্তিত হয় তবে এটি অ্যাপ্লিকেশন কোডটিও ভেঙে দেবে। সুতরাং একটি অ্যারে ফেরত দেওয়া সম্ভব হ'ল সমস্ত প্রকারের নির্ভরতা যা কোনও বস্তু তৈরি করতে পারে না।

  • কার্যকারিতা

কোনও বস্তু এর ভিতরে তথ্য রাখতে পারে যা এটি আপনাকে কার্যকর কার্যকারিতা সরবরাহ করার অনুমতি দেবে। উদাহরণস্বরূপ কোনও পোস্ট অবজেক্ট পূর্ববর্তী বা পরবর্তী পোস্টগুলি ফিরিয়ে দিতে যথেষ্ট স্মার্ট হতে পারে। কোনও অ্যারে আপনার পক্ষে কখনও তা করতে পারে নি।

  • নমনীয়তা

উপরে উল্লিখিত সামগ্রীর সমস্ত সুবিধা আরও নমনীয় সিস্টেম তৈরি করতে সহায়তা করে।


10

আমার প্রশ্ন, তারা অ্যারের পরিবর্তে অবজেক্টগুলি কেন ব্যবহার করবে?

সম্ভবত দুটি কারণ:

  • ওয়ার্ডপ্রেস বেশ পুরানো
  • অ্যারেগুলি দ্রুত হয় এবং বেশিরভাগ ক্ষেত্রে কম মেমরি নেয়
  • সিরিয়ালাইজ করা সহজ

কোনও বস্তু ব্যবহারের জন্য পারফরম্যান্সের কারণ আছে?

না। তবে অন্যান্য অনেক ভাল কারণ, উদাহরণস্বরূপ:

  • আপনি অবজেক্টগুলিতে (পদ্ধতি, সমাপনি ইত্যাদি) যুক্তি সঞ্চয় করতে পারেন
  • আপনি কোনও ইন্টারফেস ব্যবহার করে অবজেক্ট স্ট্রাকচারকে জোর করতে পারেন
  • আইডিইতে স্বতঃপূরণ আরও ভাল
  • অপরিশোধিত অ্যারে কীগুলির জন্য আপনি বিজ্ঞপ্তি পাবেন না
  • শেষ পর্যন্ত, আপনি সহজেই যে কোনও বস্তুকে অ্যারেতে রূপান্তর করতে পারেন

ওও ! = এওপি :)

(উদাহরণস্বরূপ, রুবিতে, সমস্ত কিছুই একটি অবজেক্ট PH পিএইচপি আগে পদ্ধতিগত / স্ক্রিপ্টিং ভাষা ছিল))


7

ওয়ার্ডপ্রেস (এবং অন্যান্য পিএইচপি অ্যাপ্লিকেশনগুলির একটি মোটামুটি পরিমাণ) প্রযুক্তিগত কারণে নয়, ধারণার জন্য, অ্যারের পরিবর্তে অবজেক্টগুলি ব্যবহার করে।

একটি বস্তু (এমনকি যদি stdClass মাত্র একটি উদাহরণ) একটি জিনিসের উপস্থাপনা। ওয়ার্ডপ্রেসে এটি কোনও পোস্ট, মন্তব্য বা ব্যবহারকারী হতে পারে। অন্যদিকে একটি অ্যারে জিনিসগুলির সংগ্রহ। (উদাহরণস্বরূপ, পোস্টগুলির একটি তালিকা))

Orতিহাসিকভাবে, পিএইচপি-র দুর্দান্ত অবজেক্ট সমর্থন নেই তাই অ্যারেগুলি প্রথম দিকে বেশ শক্তিশালী হয়ে ওঠে। (উদাহরণস্বরূপ, সবেমাত্র শূন্য-সূচিকৃত না হয়ে স্বেচ্ছাসেবক কীগুলির সক্ষমতা)) পিএইচপি 5 এ অবজেক্ট সাপোর্টের সাথে, বিকাশকারীদের এখন অ্যারে বা অবজেক্টগুলি কী-মান স্টোর হিসাবে ব্যবহারের মধ্যে পছন্দ রয়েছে। ব্যক্তিগতভাবে, আমি ওয়ার্ডপ্রেস পদ্ধতির পছন্দ করি কারণ আমি বস্তু এবং অ্যারে সরবরাহ করে এমন 'সত্তা' এবং 'সংগ্রহের' মধ্যে সিনট্যাক্টিক পার্থক্য পছন্দ করি।


5

আমার প্রশ্ন, তারা (ওয়ার্ডপ্রেস) অ্যারেগুলির পরিবর্তে অবজেক্টগুলি কেন ব্যবহার করবে?

এটি সত্যিই একটি ভাল প্রশ্ন এবং উত্তর দেওয়া সহজ নয়। আমি কেবল ধরে নিতে পারি যে ওয়ার্ডপ্রেসগুলিতে stdClassঅবজেক্টগুলি ব্যবহার করা সাধারণ কারণ তারা একটি ডাটাবেস ক্লাস ব্যবহার করছে যা ডিফল্টরূপে কোনও stdClassবস্তু হিসাবে রেকর্ড দেয় returns তারা এটির অভ্যস্ত হয়ে পড়ে (8 বছর এবং আরও বেশি) এবং এটিই। আমি মনে করি না যে সরল সত্যের পিছনে আরও অনেক চিন্তাভাবনা আছে।

সহযোগী অ্যারেগুলির জন্য সিনট্যাকটিক চিনি - পিএইচপি 3 সাল থেকে স্ট্যান্ডার্ড অবজেক্ট সম্পর্কে জিভ সুরসকি

  • stdClassঅ্যারেগুলির চেয়ে অবজেক্টগুলি আসলে ভাল নয়। তারা প্রায় অনেক একই। এটি ভাষার কয়েকটি historicalতিহাসিক কারণে এবং stdClassবস্তুগুলি সত্যই সীমাবদ্ধ এবং আসলে খুব মৌলিক অর্থে এটি কেবলমাত্র মূল্যবান অবজেক্ট
  • stdClassবস্তুগুলি তাদের সদস্যদের জন্য মূল্যগুলিকে স্টোর করে যেমন কোনও অ্যারে যেমন প্রতি অ্যারে করে। এবং এটাই.
  • শুধুমাত্র পিএইচপি ফ্রেইকগুলি stdClassব্যক্তিগত সদস্যদের সাথে অবজেক্ট তৈরি করতে সক্ষম । খুব বেশি সুবিধা নেই - যদি থাকে - এমনটি করে।
  • stdClassবস্তুর কোনও পদ্ধতি / ফাংশন নেই have সুতরাং ওয়ার্ডপ্রেস যে কোন ব্যবহার।
  • এর সাথে তুলনা করে array, কোনও তালিকা বা আধা-কাঠামোগত ডেটা নিয়ে কাজ করার জন্য অনেক কম কার্যকারী কার্য রয়েছে।

তবে, আপনি যদি অ্যারেতে অভ্যস্ত হন, কেবল কাস্ট করুন:

$array = (array) $object;

এবং আপনি অ্যারে হিসাবে আগে অবজেক্ট হিসাবে ডেটা অ্যাক্সেস করতে পারেন। অথবা আপনি এটি অন্যভাবে পছন্দ করেন:

$object = (object) $array;

যা কেবল সংখ্যার মতো অবৈধ সদস্যের নাম বাদ দেবে। তাই একটু যত্ন নিন। তবে আমি মনে করি আপনি বড় ছবিটি পেয়েছেন: যতক্ষণ না এটি অ্যারে এবং অবজেক্ট সম্পর্কে রয়েছে তত বেশি পার্থক্য নেই stdClass

সম্পর্কিত:


4
  1. কোডটি সেভাবে শীতল দেখায়
  2. বিষয়গুলি রেফারেন্স দিয়ে পাস হয়
  3. অবজেক্টগুলি আরও শক্তিশালী টাইপ করা হয় তারপরে অ্যারে, অতএব ত্রুটিগুলিকে ফাঁস করে দেয় (বা যখন আপনি অ-বিদ্যমান সদস্যকে ব্যবহার করার চেষ্টা করবেন তখন আপনাকে অর্থবহ ত্রুটি বার্তা দেয়)
  4. সমস্ত আইডিই আজ স্বতঃসম্পূর্ণ, তাই সংজ্ঞায়িত বস্তুর সাথে কাজ করার সময়, আইডিই আপনার জন্য অনেক কিছু করে এবং জিনিসগুলিকে গতি দেয়
  5. ইজিলি একই বাক্সে লজিক এবং ডেটা সজ্জিত করে , যেখানে অ্যারে সহ, আপনি অ্যারেতে ডেটা সংরক্ষণ করেন এবং তারপরে প্রক্রিয়াটি করতে বিভিন্ন ফাংশনের একটি সেট ব্যবহার করেন।
  6. উত্তরাধিকারসূত্রে, যদি আপনার প্রায় একইরকম কার্যকারিতা না থাকলে একই ধরণের অ্যারে থাকে তবে আপনাকে আরও কোডের নকল করতে হবে যদি আপনি যদি এটির সাথে এটি করতে চান তবে

সম্ভবত আরও কিছু কারণ নিয়ে আমি ভেবেছি


"# বিষয়গুলি রেফারেন্স দ্বারা পাস": এটি ভুল। বস্তুগুলি পিএইচপি পরিবর্তনশীল রেফারেন্স হিসাবে পাস হয় না। তারা কখনও করেনি।
হ্যাক্রে

@হাক্রে - আপনি কি এমপি 4-এ আছেন? বা দয়া করে আপনার অর্থ কী তা ব্যাখ্যা করুন।
Itay Moav -Malimovka

ভাল না যে ওয়ার্ডপ্রেস সাম্প্রতিক অবধি পিএইচপি 4 ছিল না তবে পিএইচপি 4 বা পিএইচপি 5-তে অবজেক্টগুলি রেফারেন্স হিসাবে পাস হয় না: " পিএইচপি 5 ওওপির একটি মূল পয়েন্ট যা প্রায়শই উল্লেখ করা হয় তা হ'ল" অবজেক্টগুলি ডিফল্ট দ্বারা রেফারেন্সগুলি দ্বারা পাস হয় " এটি সম্পূর্ণ সত্য নয় This এই বিভাগটি কিছু উদাহরণ ব্যবহার করে সেই সাধারণ চিন্তাকে সংশোধন করে। " অবজেক্টস এবং রেফারেন্স
হ্যাক্রে

@ হাক্রে - আমি আপনাকে বোঝাতে চাইছি তবে সমস্ত উদ্দেশ্যে ভাষাটি এমন আচরণ করে যেমন আপনি কেবল রেফারেন্সগুলি পাস করেন।
Itay Moav -Malimovka

4

অ্যারেগুলির তুলনায় অবজেক্টগুলি অনেক বেশি শক্তিশালী। শ্রেণীর উদাহরণ হিসাবে প্রতিটি বস্তুর সাথে ফাংশন সংযুক্ত থাকতে পারে। আপনার যদি এমন ডেটা থাকে যা প্রসেসিংয়ের দরকার হয় তবে আপনার একটি ফাংশন প্রয়োজন যা প্রক্রিয়াজাতকরণ করে। একটি অ্যারের সাথে আপনাকে সেই অ্যারেতে সেই ফাংশনটি কল করতে হবে এবং সেইজন্য যুক্তিকে নিজেকে ডেটাতে যুক্ত করতে হবে। একটি বস্তুর সাথে এই সমিতিটি ইতিমধ্যে সম্পন্ন হয়েছে এবং আপনাকে আর এটির যত্ন নেওয়ার দরকার নেই।

এছাড়াও আপনার তথ্য গোপনের নীতিটি বিবেচনা করা উচিত। ডাটাবেস থেকে ফিরে আসা বা যাওয়া সমস্ত কিছুই সরাসরি অ্যাক্সেসযোগ্য হওয়া উচিত নয়।


ওয়ার্ডপ্রেস ক্লাসের অবজেক্ট দেয় StdClass। আপনি যেটি হাইলাইট করেন সেগুলির সাথে এই জিনিসগুলির কোনও মিল নেই। উদাহরণস্বরূপ তাদের কোনও কার্যকারিতা নেই এবং তাদের উত্তরাধিকার নেই। এবং ওয়ার্ডপ্রেসের ক্ষেত্রে, সমস্ত শ্রেণীর ভেরিয়েবলগুলি সর্বজনীন।
হ্যাক্রে

হ্যাঁ এটা সত্য। আমি মনে করি যে এক্ষেত্রে অন্যরা যেমন বলেছেন, কেবল আপনি কী পছন্দ করেন তার উপর নির্ভর করে। আমি ওয়ার্ডপ্রেসে নেই তবে সম্ভবত তারা সমস্ত ডেটাবেস কলকে সজ্জিত করে এবং অতএব ফিরে আসার জন্য কোনও বিশেষ শ্রেণি সরবরাহ করতে পারে না। তবে আমার উত্তরটি সাধারণ ছিল এবং আমি মনে করি নির্মাতারাও অনুরূপ বিবেচনা করেছিলেন ... অথবা তারা কেবল একটি মুদ্রা ছুড়ে দিয়েছে।
কেউ এসই থেকে দূরে সরে যায় না

তারা কেবলমাত্র একটি ডাটাবেস সহায়ক শ্রেণি ব্যবহার করে যা stdClassসিএ থেকে ডিফল্টরূপে বস্তুগুলি ফেরত দেয় । 8 বছর. আপনি যদি অ্যারে পেতে চান তবে এটি পেতে আপনার একটি alচ্ছিক প্যারামিটার সেট করতে হবে।
হ্যাক্রে

3

বস্তু ফেরত দেওয়ার বেশ কয়েকটি কারণ রয়েছে:

  1. লেখার $myObject->propertyজন্য "ওভারহেড" অক্ষর কম প্রয়োজন$myArray['element']

  2. অবজেক্ট ডেটা এবং কার্যকারিতা ফিরিয়ে দিতে পারে; অ্যারে কেবলমাত্র ডেটা থাকতে পারে।

  3. চেইন সক্ষম করুন: $myobject->getData()->parseData()->toXML();

  4. আরও সহজ কোডিং: আইডিই স্বতঃপূরণ বস্তুর জন্য পদ্ধতি এবং সম্পত্তি ইঙ্গিত সরবরাহ করতে পারে।

পারফরম্যান্সের ক্ষেত্রে, অ্যারেগুলি প্রায়শই বস্তুর চেয়ে দ্রুত হয়। পারফরম্যান্সের পাশাপাশি অ্যারে ব্যবহারের বিভিন্ন কারণ রয়েছে:

  1. ফাংশনগুলির অ্যারে _ * () পরিবারের প্রদত্ত কার্যকারিতা কিছু ক্ষেত্রে প্রয়োজনীয় কোডিংয়ের পরিমাণ হ্রাস করতে পারে।

  2. অ্যারেতে গণনা () এবং ফোরচ () এর মতো অপারেশন করা যেতে পারে। অবজেক্টগুলি এটি সরবরাহ করে না (যদি না তারা আইট্রেটার বা গণনাযোগ্য প্রয়োগ করে )।


2

পারফরম্যান্সের কারণে এটি সাধারণত হয় না। সাধারণত বস্তুর জন্য অ্যারের চেয়ে বেশি খরচ হয়।

অনেকগুলি এপিআইয়ের জন্য, সম্ভবত এটি স্টোরেজ মেকানিজম হওয়ার পাশাপাশি অন্যান্য কার্যকারিতা সরবরাহকারী অবজেক্টগুলির সাথে করতে হবে। অন্যথায়, এটি অগ্রাধিকারের বিষয় এবং অ্যারে বনাম কোনও বস্তু ফিরিয়ে দেওয়ার আসলে কোনও লাভ নেই।


পিএইচপি 5 তে অ্যারে এবং অবজেক্টের মধ্যে পারফরম্যান্সের পার্থক্য প্রান্তিক।
জাস্টিন ᚅᚔᚈᚄᚒᚔ

2

একটি অ্যারের মানগুলির একটি সূচক মাত্র। যখন কোনও কোনও অবজেক্টে এমন পদ্ধতি রয়েছে যা আপনার জন্য ফলাফল তৈরি করতে পারে। অবশ্যই, কখনও কখনও আপনি সরাসরি কোনও অবজেক্টের মানগুলিতে অ্যাক্সেস করতে পারেন তবে "এটি করার সঠিক উপায়" হ'ল একটি অবজেক্টের পদ্ধতি অ্যাক্সেস করা (সেই বস্তুর মানগুলিতে অপারেটিং ফাংশন)।

$obj = new MyObject;
$obj->getName();   // this calls a method (function), so it can decide what to return based on conditions or other criteria

$array['name'];   // this is just the string "name". there is no logic to it. 

কখনও কখনও আপনি সরাসরি কোনও অবজেক্টের ভেরিয়েবলগুলি অ্যাক্সেস করতে থাকেন, এটি সাধারণত ভ্রূণ্য হয় তবে এটি প্রায়শই ঘটে।

$obj->name;   // accessing the string "name" ... not really different from an array in this case.

তবে, বিবেচনা করুন যে মাইওবজেক্ট শ্রেণিতে 'নাম' নামে একটি ভেরিয়েবল নেই, তবে এর পরিবর্তে একটি প্রথম নাম এবং সর্বশেষ-নাম ভেরিয়েবল রয়েছে।

$obj->getName();  // this would return first_name and last_name joined.
$obj->name;  // would fail...
$obj->first_name; 
$obj->last_name; // would be accessing the variables of that object directly.

এটি খুব সাধারণ উদাহরণ, তবে আপনি দেখতে পাচ্ছেন এটি কোথায় চলছে। একটি শ্রেণি ভেরিয়েবলগুলির একটি সংকলন এবং ফাংশন সরবরাহ করে যা এই ভেরিয়েবলগুলিতে সমস্ত স্ব-অন্তর্ভুক্ত লজিকাল সত্তার মধ্যে পরিচালনা করতে পারে। সেই সত্তার একটি উদাহরণকে একটি অবজেক্ট বলা হয় এবং এটি যুক্তি এবং গতিশীল ফলাফলগুলি উপস্থাপন করে যা একটি অ্যারে কেবল থাকে না।


1

বেশিরভাগ সময় অবজেক্টগুলি ঠিক তত দ্রুত, যদি অ্যারেগুলির চেয়ে দ্রুত না হয় তবে পিএইচপিতে কোনও লক্ষণীয় পার্থক্য নেই। মূল কারণ হ'ল অ্যারেগুলির চেয়ে অবজেক্টগুলি আরও শক্তিশালী। অবজেক্ট ওরিয়েন্টেটেড প্রোগ্রামিং আপনাকে অজানা তৈরি করতে এবং কেবলমাত্র ডেটা সংরক্ষণ করার অনুমতি দেয় না, তবে সেগুলিতে কার্যকারিতা রাখে, উদাহরণস্বরূপ, পিএইচপিতে মাইএসকিউএলআই ক্লাস আপনাকে একটি ডাটাবেস অবজেক্ট রাখতে দেয় যা আপনি পদ্ধতিগত পদ্ধতির পরিবর্তে ইনবিল্ট ফাংশনগুলির হোস্ট ব্যবহার করে ম্যানিপুলেট করতে পারেন।

সুতরাং মূল কারণ হ'ল ওওপি একটি দুর্দান্ত দৃষ্টান্ত। কেন ওওপি ব্যবহার করা ভাল ধারণা সম্পর্কে একটি নিবন্ধ লিখেছিলাম এবং ধারণাটি ব্যাখ্যা করার জন্য আপনি এখানে একবার নজর দিতে পারেন: http://tomsbigbox.com/an-intrration-to-oop/

অপ্রাপ্তবয়স্ক প্লাস হিসাবে আপনি কোনও বস্তু থেকে ডেটা পেতেও কম টাইপ করেন - $ পরীক্ষা-> ডেটা $ টেস্ট ['ডেটা'] এর চেয়ে ভাল।


1

আমি ওয়ার্ড প্রেসের সাথে অপরিচিত। এখানে প্রচুর উত্তর সুপারিশ করে যে বস্তুর একটি শক্তি কার্যকরী কোড ধারণ করার ক্ষমতা রাখে। কোনও ফাংশন / এপিআই কল থেকে কোনও অবজেক্ট ফেরত দেওয়ার সময় এটিতে ইউটিলিটি ফাংশন থাকা উচিত নয়। শুধু সম্পত্তি।

প্রত্যাবর্তনকারী বস্তুগুলির শক্তি হ'ল এপিআইয়ের পিছনে থাকা যা কিছু আছে তা আপনার কোড ভঙ্গ না করে পরিবর্তন করতে পারে।

উদাহরণ: আপনি কী / মান জোড়া, ডিবি কলামের প্রতিনিধিত্বকারী কী সহ ডেটার একটি অ্যারে পাবেন। ডিবি কলামটির নাম পরিবর্তন হলে আপনার কোডটি ভেঙে যাবে।


1

আমি পিএইচপি 5.3.10 (উইন্ডোজ) এ পরবর্তী পরীক্ষা চালাচ্ছি:

for ($i = 0; $i < 1000000; $i++) {
    $x = array();
    $x['a'] = 'a';
    $x['b'] = 'b';
}

এবং

for ($i = 0; $i < 1000000; $i++) {
    $x = new stdClass;
    $x->a = 'a';
    $x->b = 'b';
}

Http://atomized.org/2009/02/really-damn-slow-a-look-at-php-objects/comment-page-1/#comment-186961 থেকে অনুলিপি করা হয়েছে

10 সমবর্তী ব্যবহারকারী এবং 10 বার (গড় পাওয়ার জন্য) এর জন্য ফাংশনটি কল করা

  • অ্যারে: 100%
  • অবজেক্ট: 214% - 216% (2 গুণ বেশি ধীর)।

একে, অবজেক্ট এটি এখনও বেদনাদায়ক ধীর। ওওপি জিনিসগুলি পরিষ্কার রাখে তবে এটি সাবধানে ব্যবহার করা উচিত।

ওয়ার্ডপ্রেস কি প্রয়োগ করছে? ভাল, উভয় সমাধান, অবজেক্টস, অ্যারে এবং অবজেক্ট এবং অ্যারে ব্যবহার করছে , ক্লাস ডাব্লুপিডিবি পরে ব্যবহার করে (এবং এটি ওয়ার্ডপ্রেসের হৃদয়)।


আপনার পিএইচপি 5.4 এ তুলনা দেখতে হবে। অবজেক্টগুলির পারফরম্যান্স অসামান্য এবং কখনও কখনও অ্যারের চেয়েও দ্রুত।
সংকেত সাহু

0

এটি ওওপির বক্সিং এবং আনবক্সিং নীতি অনুসরণ করে। জাভা এবং সি # এর মতো ভাষা যদিও এটিকে স্থানীয়ভাবে সমর্থন করে তবে পিএইচপি দেয় না। তবে এটি পিএইচপি-তে কিছুটা ডিগ্রি অর্জন করা সম্ভব, কেবল ভাষায় না কারণ এটির সমর্থন করার জন্য ভাষাটির কোনও নির্মাণকাজ নেই। পিএইচপি-তে বাক্সের ধরণগুলি শৃঙ্খলাবদ্ধ হতে সহায়তা করতে পারে, সমস্ত কিছুকে কেন্দ্রিক করে রাখে এবং পদ্ধতি স্বাক্ষরে টাইপ ইঙ্গিত দেওয়ার অনুমতি দেয়। নেতিবাচক দিকটি ওভারহেড এবং সত্য যে সত্য আপনি এখন checking € stinstanceofâ € কনস্ট্রাক্ট ব্যবহার করে অতিরিক্ত চেক করতে পারেন। পিডিটি-র মতো ইন্টেলিজেন্স বা কোড সহায়তা রয়েছে এমন বিকাশ সরঞ্জামগুলি ব্যবহার করার সময় টাইপ সিস্টেম থাকাও একটি প্লাস। পদ্ধতির জন্য গুগল / বিং / ইয়াহু করার পরিবর্তে এটি অবজেক্টে বিদ্যমান এবং আপনি একটি ড্রপ ডাউন সরবরাহ করার জন্য সরঞ্জামটি ব্যবহার করতে পারেন।


0

যদিও তথ্যগুলি বেশি হওয়ার চেয়ে অবজেক্টের বিষয়ে করা পয়েন্টগুলি বৈধ হয় কারণ তারা সাধারণত ডেটা এবং আচরণের কারণেই সেখানে মার্টিন ফাউলারের "প্যাটার্নস অফ এন্টারপ্রাইজ অ্যাপ্লিকেশন আর্কিটেকচার" তে বর্ণিত কমপক্ষে একটি প্যাটার্ন রয়েছে যা আপনি স্থানান্তরিত হচ্ছেন এই ধরণের সেন্টারিওতে প্রযোজ্য একটি সিস্টেম (API এর পিছনে অ্যাপ্লিকেশন) এবং অন্যটি (আপনার অ্যাপ্লিকেশন) থেকে ডেটা।

এটির ডেটা ট্রান্সফার অবজেক্ট - এমন একটি বস্তু যা পদ্ধতি কলগুলির সংখ্যা হ্রাস করার জন্য প্রক্রিয়াগুলির মধ্যে ডেটা বহন করে।

সুতরাং যদি প্রশ্নটি হয় যে এপিআইগুলি কোনও ডিটিও বা একটি অ্যারে ফিরিয়ে আনবে আমি বলব পারফরম্যান্স ব্যয় যদি নগণ্য হয় তবে আপনার বিকল্পটি আরও রক্ষণাবেক্ষণযোগ্য হওয়া উচিত যা আমি তর্ক করব ডিটিও বিকল্পটি ... তবে অবশ্যই আপনিও আপনার সিস্টেম বিকাশকারী দলের দক্ষতা এবং সংস্কৃতি এবং প্রতিটি বিকল্পের জন্য ভাষা বা আইডিই সমর্থন বিবেচনা করতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.