পিএইচপি হ'ল একটি মিশ্র দৃষ্টান্তের ভাষা, অ্যারে হিসাবে অ-অবজেক্ট ডেটা ব্যবহার এবং ফেরত দেওয়ার অনুমতি দেয়। প্রোগ্রামিং কোন নির্দিষ্ট পরিস্থিতিতে কী ব্যবহার করতে চায় তা সিদ্ধান্ত নেওয়ার সময় অ্যারে বনাম অবজেক্টের নির্বাচনের জন্য কিছু গাইডলাইন পরিষ্কার করার চেষ্টা করার জন্য আমি একটি প্রশ্ন উত্থাপন করি।
এটি পিএইচপি ল্যাঙ্গুয়েজ কনস্ট্রাক্টস ব্যবহার করে ডেটা এনকোড করার উপায়গুলি এবং একটি উপায় সম্ভবত ডেটা পাসিং উদ্দেশ্যে (যেমন পরিষেবা-ওরিয়েন্টেড আর্কিটেকচার বা ওয়েব পরিষেবাদি) জন্য অন্যটিকে বেছে নেওয়া উচিত সম্পর্কে সত্যিই একটি প্রশ্ন।
উদাহরণ
ধরুন আপনার কাছে {মূল্য, নাম, অংশ_সংখ্যা, আইটেম_কাউন্ট isting সমন্বিত একটি আইটেম টাইপ রয়েছে} আপনার প্রোগ্রামটি এই জাতীয় বেশ কয়েকটি আইটেমের প্রকারের প্রদর্শন করার জন্য কল করে, যেখানে আপনি প্রতিটি আইটেমের ধরণকে বহিরাগত ধারক হিসাবে কোনও অ্যারে ব্যবহার করার সিদ্ধান্ত নেন । [এছাড়াও আপনি পিএইচপি ব্যবহার করতে পারেন ArrayObject
OO যেমন পণ্য দৃষ্টান্ত জন্য, কিন্তু আমার প্রশ্ন সম্পর্কে নয় যে (বাইরের) অ্যারে]। আমার প্রশ্নটি আইটেমের ধরণের ডেটা কীভাবে এনকোড করতে হবে এবং কোন দৃষ্টান্তটি ব্যবহার করতে হবে সে সম্পর্কে। পিএইচপি আপনাকে ব্যবহার করতে দেয় PHP Native Arrays
বা PHP Objects
।
আমি এই জাতীয় ডেটা এখানে দুটি উপায়ে এনকোড করতে পারি, এরকম:
//PHP's associative arrays:
$ret = array(
0 => array(
'cost' => 10.00,
'name' => 'item1',
'part_number' => 'zyz-100',
'item_count' => 15
),
1 => array(
'cost' => 34.00,
'name' => 'item2',
'part_number' => 'abc-230',
'item_count' => 42
),
);
বনাম
//here ItemType is encapsulated into an object
$ret = array(
0 => new ItemType(10.00, 'item1', 'zyz-100', 15),
1 => new ItemType(34.00, 'item2', 'abc-230', 42),
);
class ItemType
{
private $price;
private $name;
private $partNumber;
private $itemCount;
function __construct($price, $name, $partNumber, $itemCount) {..}
}
আমি কি ভাবছি
অ্যারে এনকোডিং হালকা ওজনযুক্ত এবং আরও বেশি JSON- প্রস্তুত, তবে জগাখিচুড়ি করা সহজতর হতে পারে। মিশে যাওয়া অ্যারে কীগুলির মধ্যে একটিকে মিসস্পেল করুন এবং আপনার একটি ত্রুটি থাকতে পারে যা ধরা আরও কঠিন। তবে এটি একটি ঝোঁক পরিবর্তন করা সহজ। বলুন যে আমি item_count
আর সঞ্চয় করতে চাই না, আমি item_count
অ্যারেতে সমস্ত দৃষ্টান্ত সহজেই মুছে ফেলার জন্য যে কোনও পাঠ্য-প্রক্রিয়াকরণ সফটওয়্যার ব্যবহার করতে পারি এবং তারপরে সেগুলি ব্যবহার করে এমন অন্যান্য ফাংশন আপডেট করতে পারি। এটি আরও ক্লান্তিকর প্রক্রিয়া হতে পারে তবে এটি সহজ।
অবজেক্ট ওরিয়েন্টেড এনকোডিং আইডিই এবং পিএইচপি ভাষা সুবিধাগুলির জন্য কল করে এবং আগে থেকে কোনও ত্রুটি ধরা সহজ করে তোলে তবে প্রোগ্রামিং এবং কোডিং প্রথম স্থানে কঠিন is আমি আরও শক্ত বলি, কারণ আপনাকে নিজের অবজেক্ট সম্পর্কে কিছুটা ভাবতে হবে, আগে ভাবুন এবং ওও কোডিং অ্যারে স্ট্রাকচারগুলি টাইপ করার চেয়ে কিছুটা বেশি জ্ঞানীয় লোড নেয়। এটি বলেছিল, একবার এটি কোড আপ হয়ে গেলে, কিছু পরিবর্তন সম্ভবত কার্যকর করা সহজ, এক অর্থে, অপসারণ item_count
, উদাহরণস্বরূপ, কোডের কম লাইনে পরিবর্তন প্রয়োজন। কিন্তু এগুলি পরিবর্তনের জন্য অ্যারে পদ্ধতির তুলনায় এখনও একটি উচ্চতর জ্ঞানীয় লোডের প্রয়োজন হতে পারে, যেহেতু উচ্চ-স্তরের ওও সুবিধা জড়িত involved
প্রশ্ন
কিছু ক্ষেত্রে এটি স্পষ্ট, যেমনগুলির ক্ষেত্রে যেমন আমাকে ডেটাতে হেরফের করতে হবে to তবে কিছু ক্ষেত্রে, যেখানে আমাকে "আইটেম টাইপ" ডেটা মাত্র কয়েকটি লাইন সংরক্ষণ করতে হবে সেখানে অ্যারে ব্যবহার করবেন কিনা বা অবজেক্টগুলি নির্মাণ করবেন কিনা তা স্থির করার চেষ্টা করার সময় আমার ঝুঁকির বিষয়ে স্পষ্ট নির্দেশিকা বা বিবেচনা নেই। দেখে মনে হচ্ছে আমি কেবল একটি মুদ্রা টস করতে এবং একটি বাছাই করতে পারি। এখানে ক্ষেত্রে যে কি?
array
, 2: User-defined Class
, 3: stdClass
। গতির দিক দিয়ে পারফরম্যান্স তুলনা করার সময় array
এবং একই সাথে User-defined class
যেমন (যেমন আপনার ItemType
) বেশ একই রকম হয় তবে সংজ্ঞায়িত class
এগুলি ব্যবহার করে array
এসএমএসের চেয়ে কম মেমরি ব্যবহার করে । stdClass
অন্যদিকে তিনটি বিকল্পের মধ্যে সবচেয়ে ধীর এবং সবচেয়ে বেশি মেমরি ব্যবহার করে।
(object)['foo'=>'bar']
। ফলস্বরূপ মানটিStdClass
শ্রেণীবদ্ধ হয়, এর সম্পূর্ণরূপে JSON- এনকোড হবেjson_encode()
এবং বৈশিষ্ট্যগুলির নাম সহজেই অ্যারে সূচকগুলির নামে পরিবর্তন করা যেতে পারে (যা সর্বদা এত সহজ নয়, যখন এটি কোনও ভেরিয়েবলের মাধ্যমে পরোক্ষভাবে অ্যাক্সেস করা হয়)। যাইহোক, এই জাতীয় মানগুলি নিয়ে বিভিন্ন অপারেশন রয়েছে; উদাহরণস্বরূপ, অ্যারে ইউনিয়নগুলি হওয়ায় আপনার অবজেক্ট ইউনিয়ন নেই এবং আপনি সরাসরিarray_*()
ফাংশনগুলি ব্যবহার করতে পারবেন না ।