আমি যতদূর জানি (যা খুব সামান্য), দুটি উপায় দেওয়া হয়েছে:
$var = new object()
তারপর:
// Method 1: Set to null
$var = null;
// Method 2: Unset
unset($var);
আরও ভাল পদ্ধতি? আমি কি এখানে চুল বিভক্ত করছি?
আমি যতদূর জানি (যা খুব সামান্য), দুটি উপায় দেওয়া হয়েছে:
$var = new object()
তারপর:
// Method 1: Set to null
$var = null;
// Method 2: Unset
unset($var);
আরও ভাল পদ্ধতি? আমি কি এখানে চুল বিভক্ত করছি?
উত্তর:
আপনি খুঁজছেন unset()
।
তবে এটি বিবেচনায় রাখুন যে আপনি কোনও বিষয় স্পষ্টভাবে ধ্বংস করতে পারবেন না।
এটি সেখানে থাকবে, তবে আপনি যদি অবজেক্টটি আনসেট না করেন এবং আপনার স্ক্রিপ্ট পিএইচপি মেমরির সীমাবদ্ধ করে তবে প্রয়োজনীয় জিনিসগুলি আবর্জনা সংগ্রহ করা হবে না। আমি আরও unset()
ভাল পারফরম্যান্স বলে মনে হচ্ছে (এটিকে নালায় সেট করার বিপরীতে) দিয়ে যাব (পরীক্ষার নয় তবে মন্তব্যগুলির একটিতে নথিভুক্ত পিএইচপি অফিসিয়াল ম্যানুয়াল থেকে নেওয়া কোনও ।
এটি বলেছিল, মনে রাখবেন না যে পিএইচপি সর্বদা পৃষ্ঠা পরিবেশন করার সাথে সাথে অবজেক্টগুলিকে ধ্বংস করে দেয়। সুতরাং এটি শুধুমাত্র সত্যই দীর্ঘ লুপ এবং / বা ভারী নিবিড় পৃষ্ঠাগুলিতে প্রয়োজন।
unset()
অবজেক্ট রেফারেন্স সরিয়ে ফেলা হবে?
একটি কার্যকর পোস্ট এ সম্পর্কে বিভিন্ন ভুল বোঝার ব্যাখ্যা করে:
স্পষ্টভাবে ডেস্ট্রাক্টরকে কল করবেন না
এটি ডেস্ট্রাক্টর কীভাবে কাজ করে সে সম্পর্কে বেশ কয়েকটি ভুল ধারণা ধারণ করে। এটিকে স্পষ্টভাবে কল করা পিএইচপি 5 ডক অনুসারে আপনার পরিবর্তনশীলটিকে ধ্বংস করবে না:
পিএইচপি 5 অন্যান্য অবজেক্ট-ভিত্তিক ভাষার মতো সি ++ এর মতোই একটি ডেস্ট্রাক্টর ধারণাটি উপস্থাপন করে। কোনও নির্দিষ্ট অবজেক্টের বা শাটডাউন ক্রমের সময় কোনও ক্রমে অন্য কোনও রেফারেন্স না পাওয়া মাত্রই ডেস্ট্রাক্টর পদ্ধতিটি কল করা হবে।
উপরের পোস্টে উল্লেখ করা হয়েছে যে নালকে পরিবর্তনশীল সেট করা কিছু ক্ষেত্রে কাজ করতে পারে, যতক্ষণ না অন্য কিছু বরাদ্দ মেমরিটির দিকে নির্দেশ করে না।
সংক্ষিপ্ত উত্তর: উভয় প্রয়োজন।
আমার মনে হচ্ছে সঠিক উত্তরটি দেওয়া হয়েছিল তবে স্বল্প পরিমাণে। হ্যাঁ সাধারণত গতিবিহীন () "গতি" এর জন্য সেরা তবে আপনি যদি মেমরিটি তাত্ক্ষণিকভাবে দাবি করতে চান (সিপিইউয়ের দামে) নাল ব্যবহার করতে চান।
উল্লিখিত অন্যদের মতো, নালায় সেট করার অর্থ এই নয় যে সবকিছু পুনরুদ্ধার করা হয়েছে, আপনি ভাগ করে নেওয়া মেমরি (অনাবৃত) বস্তু থাকতে পারেন যা বস্তুর ধ্বংসকে আটকাবে। তদ্ব্যতীত, অন্যরা যেমন বলেছে, আপনি কোনওভাবেই অবজেক্টগুলিকে স্পষ্টভাবে "ধ্বংস" করতে পারবেন না যাতে আপনার এটি আর যাইহোক করার চেষ্টা করা উচিত নয়।
আপনার জন্য কোনটি সর্বোত্তম তা নির্ধারণ করতে হবে। এছাড়াও আপনি___ ডিস্ট্রাক্ট () ব্যবহার করতে পারেন এমন কোনও জিনিসের জন্য যা আনসেট বা নালায় ডাকা হবে তবে এটি সাবধানে ব্যবহার করা উচিত এবং অন্যদের মতো, কখনও কখনও সরাসরি ডাকা হবে না!
দেখা:
http://www.stoimen.com/blog/2011/11/14/php-dont-call-the-destructor-explicitly/
এটি একটি সহজ প্রমাণ যে আপনি কোনও বিষয়টিকে ধ্বংস করতে পারবেন না, আপনি কেবল এটির কোনও লিঙ্ক নষ্ট করতে পারেন।
$var = (object)['a'=>1];
$var2 = $var;
$var2->a = 2;
unset($var2);
echo $var->a;
আয়
2
এটি এখানে কর্মে দেখুন: https://eval.in/1054130
$var2
যা একটি উল্লেখ ছিল $var
। এখন $var
আপনিও ধ্বংস করে ফেলুন এবং ধারণা করছেন যে বস্তুর উপরে অন্য কোনও রেফারেন্স নেই, আপনি শেষ করেছেন।
এমন পরিস্থিতিতে হতে পারে যেখানে আপনি একটি নতুন মাইসকিলি অবজেক্ট তৈরি করছেন।
$MyConnection = new mysqli($hn, $un, $pw, $db);
তবে আপনি অবজেক্টটি বন্ধ করার পরেও
$MyConnection->close();
আপনি যদি print_r()
বিষয়বস্তু পরীক্ষা করতে ব্যবহার করবেন$MyConnection
নীচের মতো একটি ত্রুটি পাবেন:
Error:
mysqli Object
Warning: print_r(): Property access is not allowed yet in /path/to/program on line ..
( [affected_rows] => [client_info] => [client_version] =>.................)
যে ক্ষেত্রে আপনি ব্যবহার করতে পারবেন না unlink()
কারণunlink()
একটি পাথ নামের স্ট্রিংয়ের প্রয়োজন হবে তবে এই ক্ষেত্রে $MyConnection
একটি অবজেক্ট।
সুতরাং এর মানটি বাতিল করতে আপনার আরেকটি পছন্দ রয়েছে:
$MyConnection = null;
যেমনটি আপনি প্রত্যাশা করেছেন এখন জিনিস ঠিক চলছে। ভেরিয়েবলের ভিতরে আপনার কোনও সামগ্রী নেই$MyConnection
পাশাপাশি আপনি ইতিমধ্যে মাইসকিলি অবজেক্টটি পরিষ্কার করেছেন।
আপনার ভেরিয়েবলের মান সেট করার আগে অবজেক্টটি বন্ধ করার প্রস্তাব দেওয়া অনুশীলন null
।
আমি আনসেট না করে যাব কারণ এটি আবর্জনা সংগ্রহকারীকে আরও ভাল ইঙ্গিত দিতে পারে যাতে স্মৃতি শীঘ্রই আবার পাওয়া যায়। সাবধান থাকুন যে জিনিসটি যে কোনও জিনিসটিকে অন্য রেফারেন্সগুলি দেখায় বা প্রথমে আনসেট আনতে না পারে বা আপনাকে সত্যিই আবর্জনা সংগ্রাহকের জন্য অপেক্ষা করতে হবে যেহেতু তখন তাদের কোনও হ্যান্ডেল নেই।
new
একবার ব্যবহার করি , তখন আমাদের অবশ্যইdelete
একবার ব্যবহার করা উচিত । এটি পিএইচপি-তে সত্য নয়? স্বয়ংক্রিয় আবর্জনা সংগ্রহ যখন বস্তুর আর প্রয়োজন হয় না?