পিএইচপি-তে কোনও সামগ্রীর সম্পত্তি মুছে ফেলা সম্ভব?


196

আমার যদি একটা stdObjectবক্তব্য থাকে $a,।

অবশ্যই নতুন সম্পত্তি বরাদ্দ করতে কোনও সমস্যা নেই $a,

$a->new_property = $xyz;

তবে আমি এটি মুছে ফেলতে চাই, তাই unsetএখানে কোনও সাহায্য নেই।

সুতরাং,

$a->new_property = null;

এটা এক ধরনের। তবে কি আরও 'মার্জিত' উপায় আছে?


আপনি কীভাবে আনসেটটি ব্যবহার করে চেষ্টা করেছিলেন কোড পোস্ট করতে পারেন? আমার অর্থে আনসেটটি কাজ করা উচিত B তবে সম্ভবত আপনি প্রসঙ্গটি সদৃশ করছেন
আরশদীপ

আনসেট () কীভাবে = নাল থেকে আরও মার্জিত তা সত্যিই নিশ্চিত নয়, তবে এটি কেবল আমারই হতে পারে
রবার্ট সিনক্লেয়ার

উত্তর:


353
unset($a->new_property);

এটি অ্যারে উপাদান, ভেরিয়েবল এবং অবজেক্ট বৈশিষ্ট্যের জন্য কাজ করে।

উদাহরণ:

$a = new stdClass();

$a->new_property = 'foo';
var_export($a);  // -> stdClass::__set_state(array('new_property' => 'foo'))

unset($a->new_property);
var_export($a);  // -> stdClass::__set_state(array())

10
nb একটি পূর্ণসংখ্য কী রয়েছে এমন কোনও সম্পত্তি সরাসরি আনসেট করা সম্ভব নয়। উদাহরণস্বরূপ $o=(object)array('a','b','c'); (কেবলমাত্র এই জাতীয় বৈশিষ্ট্য অ্যাক্সেস করার জন্য আপনাকে অবজেক্টটিকে (পিছনে) কোনও অ্যারেতে রূপান্তর করতে হবে!)
ড্যানোরটন

4
@ ইয়ানিকরোচন, আমার মন্তব্যটি একটি objectনয়, একটি সম্পর্কে array। ;-)
ড্যানোর্টন

1
@danorton কেন কেউ, তাদের অধিকার মনে, একটি রূপান্তর হবে arrayএকটি মধ্যে object? এটি কেবল কোনও অর্থ দেয় না (এমনকি পিএইচপি এটির অনুমতি দেয়)। আমি মন্তব্য করব না এবং খারাপ প্রোগ্রামিংয়ের অভ্যাসগুলি ছড়িয়ে দেব না :) কোনও অপরাধ নয় :)
ইয়ানিক রোচন

8
@ ইয়ানিকরোচন এটি বুঝতে পারবেন যে আপনি যদি দুটি বস্তুর বৈশিষ্ট্যগুলিকে একত্রীকরণ করতে চান (তবে কোনও পদ্ধতি নেই, সেগুলি কেবল সঞ্চয়স্থানের মাধ্যম হিসাবে ব্যবহৃত হয়): এই ক্ষেত্রে, দ্রুত এবং সহজতম রুটটি অ্যারে_রেপস_সেসক্রিভ প্রয়োগ করতে উভয় বস্তুকে অ্যারে রূপান্তরিত করে () এবং পরে বস্তুতে ফিরে। কেউ কেন কেবলমাত্র সম্পত্তি সংরক্ষণের জন্য কোনও অবজেক্ট ব্যবহার করবেন, এটি সাধারণত মাইএসকিউএল এর মতো ডাটাবেসগুলি থেকে অ্যারের পরিবর্তে কোনও বস্তু হিসাবে রেকর্ডগুলি আনার অ্যাপ্লিকেশনগুলিতে ঘটে (স্ট্যান্ডার্ড ফাংশন যেমন মাইএসকিএল_ফেটচ_বজেক্ট ()) ব্যবহার করে।
চমত্কার

1
@ উদারটন এফওয়াইআই, .2.২ থেকে আপনি করতে পারেন unset($o->{0});বা করতে পারেন $k = 0; unset($o->$k);
সার্কে

43

আপনি যদি কোনও বস্তুর উপরে লুপিং করে থাকেন তবে এটিও বিশেষভাবে কাজ করে।

unset($object[$key])

হালনাগাদ

পিএইচপি এর নতুন সংস্করণগুলি Fatal error: Cannot use object of type Object as array@CXJ দ্বারা উল্লিখিত মারাত্মক ত্রুটি ফেলে দেয়। সেক্ষেত্রে আপনি পরিবর্তে বন্ধনী ব্যবহার করতে পারেন

unset($object{$key})

আপনি কি "নতুন" সংস্করণ বর্ণিত তা নির্দিষ্ট করতে পারবেন? আমার জন্য, পিএইচপি 7.1 সহ unset($object[$key])কাজ করে এবং unset($object->{$key})না হয় (আরও সুনির্দিষ্ট হতে হবে, unset($object['literal_key'])এবং unset($object->{'literal_key'}))। পিএস এইচএম, আমি ভুল হতে পারি, যদিও, আমি যে জিনিসটি সম্পাদনা করছি তা
ভেবে আরে

বস্তুর সংগ্রহ থেকে কোনও সম্পত্তি আনসেট করে না।
ভিক্টর জোরাস

1

আপনি যদি কোনও বস্তুর উপরে লুপিং করে থাকেন তবে এটিও কাজ করে।

unset($object->$key);

বন্ধনী ব্যবহার করার দরকার নেই।


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