না, আপনি সরাসরি 'হুক'র মাধ্যমে ক্লাস' আরম্ভ করতে 'বা ইনস্ট্যান্ট করতে পারবেন না। কিছু অতিরিক্ত কোড সর্বদা প্রয়োজন (এবং এটি নিজের পক্ষে পোকার কীড় খুলে দেওয়ার সাথে সাথে এটি করার পক্ষে আকাঙ্ক্ষিত জিনিস নয়।
এটি করার আরও ভাল উপায় এখানে:
class MyClass {
function __construct() {
add_action( 'admin_init',array( $this, 'getStuffDone' ) );
}
function getStuffDone() {
// .. This is where stuff gets done ..
}
}
$var = new MyClass();
অবশ্যই এটি আরও সাধারণ ক্ষেত্রে আরও সহজ করার জন্য একটি ইন্টারফেস ক্লাস তৈরি করতে পারে:
class IGetStuffDone {
function IGetStuffDone(){
add_action( 'admin_init',array( $this, 'getStuffDone' ) );
}
public abstract function getStuffDone();
}
নোট করুন যে একটি ইন্টারফেস হিসাবে আপনি সরাসরি এই ধরণের একটি অবজেক্ট তৈরি করতে পারবেন না, তবে আপনি একটি উপ-শ্রেণি তৈরি করতে পারেন, আপনাকে বলতে দিতে:
class CDoingThings extends IGetStuffDone {
function getStuffDone(){
// doing things
}
}
$var = new CDoingThings();
যা স্বয়ংক্রিয়ভাবে সমস্ত হুক যুক্ত করবে, আপনাকে কেবল একটি সাবক্লাসে ঠিক কী করা হচ্ছে তা নির্ধারণ করতে হবে এবং তারপরে এটি তৈরি করতে হবে!
কনস্ট্রাক্টরগুলিতে
আমি কোনও হুক ফাংশন হিসাবে কোনও কনস্ট্রাক্টরকে যুক্ত করব না, এটি খারাপ অনুশীলন, এবং অনেকগুলি অস্বাভাবিক ঘটনা ঘটায়। এছাড়াও বেশিরভাগ ভাষায় কোনও কনস্ট্রাক্টর সেই বস্তুটি ফিরিয়ে দেয় যা তাত্ক্ষণিকভাবে চলছে, সুতরাং আপনার হুক যদি কোনও ফিল্টারের মতো কিছু ফেরতের প্রয়োজন হয় তবে এটি ফিল্টারযুক্ত ভেরিয়েবলটি আপনার পছন্দ মতো ফিরিয়ে দেবে না, পরিবর্তে এটি শ্রেণীর অবজেক্টটি ফিরিয়ে দেবে।
কনস্ট্রাক্টর বা ডেস্ট্রাক্টরকে ডেকে আনা খুব, খুব, খুব খারাপ প্রোগ্রামিং অনুশীলন, আপনি কোন ভাষায়ই থাকুন না কেন এবং কখনই করা উচিত নয় ।
নির্মাণকারীদেরও অবজেক্ট তৈরি করতে হবে, তাদের ব্যবহারের জন্য প্রস্তুত করার জন্য, প্রকৃত কাজের জন্য নয়। অবজেক্টের দ্বারা কাজটি আলাদা ফাংশনে হওয়া উচিত।
স্ট্যাটিক ক্লাস পদ্ধতি, এবং একেবারে ইনস্ট্যান্টিয়েট / আরম্ভ করার দরকার নেই
যদি আপনার শ্রেণি পদ্ধতিটি স্থিত শ্রেণীর পদ্ধতি হয় তবে আপনি ক্লাসের নাম $this
নীচে প্রদর্শিত না হয়ে উদ্ধৃতিতে পাস করতে পারেন :
class MyClass {
public static function getStuffDone() {
// .. This is where stuff gets done ..
}
}
add_action( 'admin_init', array('MyClass','getStuffDone' ) );
বন্ধ এবং পিএইচপি 5.3
দুঃখজনকভাবে আপনি নতুন বর্গ তৈরির লাইন এড়াতে পারবেন না। এটি এড়িয়ে যাওয়ার একমাত্র অন্য সমাধানের মধ্যে বয়লার প্লেট কোড জড়িত যা এখনও সেই লাইন রয়েছে এবং পিএইচপি 5.3+ প্রয়োজন যেমন:
add_action('admin_init',function(){
$var = new MyClass();
$var->getStuffDone();
});
কোন পর্যায়ে আপনি ক্লাসটি এড়িয়ে যেতে পারেন এবং কেবল একটি ফাংশন ব্যবহার করতে পারেন:
add_action('admin_init',function(){
// do stuff
});
তবে মনে রাখবেন আপনি এখন বেনাম ফাংশনগুলির স্পেক্টারটি চালু করেছেন। উপরের ক্রিয়াটি ব্যবহার করে সরানোর কোনও উপায় remove_action
নেই এবং এটি এমন ডেভেলপারদের জন্য প্রচন্ড ব্যথা সৃষ্টি করতে পারে এবং যা অন্যান্য লোকের কোডের সাথে কাজ করতে হয়।
আম্পারসন্ডসে
আপনি এর মতো ব্যবহৃত ক্রিয়া দেখতে পাবেন:
array( &$this, 'getStuffDone' );
এটা খারাপ । &
পিএইচপি 4 এ আবার যুক্ত করা হয়েছিল যখন বস্তুগুলিকে রেফারেন্স হিসাবে নয় মান হিসাবে পাস করা হয়। পিএইচপি 4 এক দশকেরও বেশি পুরানো, এবং খুব দীর্ঘ সময়ে ওয়ার্ডপ্রেস সমর্থন করে না।
নেই কোনো কারণ ব্যবহার করতে &this
যখন আঙ্গুলসমূহ এবং ফিল্টার যুক্ত করা এবং রেফারেন্স কোন সমস্যা হবে সরানোর, এবং এমনকি পিএইচপি ভবিষ্যত সংস্করণের সাথে সামঞ্জস্যের উন্নতি হতে পারে
পরিবর্তে এটি ব্যবহার করুন:
array( $this, 'getStuffDone' );