আমি ওওপি স্টাইলে একটি নতুন প্লাগইন শুরু করছি
'ওওপি শৈলী' আপনার জন্য কী বোঝায়? শ্রেণীর বিবৃতি দিয়ে আপনার সমস্ত ফাংশন মোড়ানো? তাহলে আপনি এটা ভুল করছেন। আপনি ক্লাসটি নামস্থান হিসাবে মিস করেছেন।
এবং আমি সবেমাত্র জানতে পেরেছি যে আমার মূল শ্রেণিটি প্রচুর পরিমাণে ইনস্ট্যান্ট করা হচ্ছে
তাই না?
class Foo
{
public function __construct() {
// assuming your wp-content dir is writeable
$filename = sprintf( WP_CONTENT_DIR . '/dummyfile-%d.txt', time() );
$handle = fopen( $filename, 'w' );
if ( $handle ) {
fputs( $handle, '-' );
fclose( $handle );
}
}
}
add_action( 'plugins_loaded', function() { new Foo(); } );
এটি ব্যবহার করে তৈরি করা ফাইলগুলির সংখ্যা গণনা করুন। যদি আমি এটি চেষ্টা করে দেখি তবে প্রতিটি পৃষ্ঠার অনুরোধের জন্য একটি ফাইল তৈরি করা আছে। এর অর্থ, প্রতিটি পৃষ্ঠার অনুরোধের জন্য ফু ক্লাসের কেবল একটি উদাহরণ ।
একটি অ্যাকশন কল চেষ্টা করুন
class Foo
{
public function __construct() {
$this->write_file( 'in_constructor' );
add_action( 'init', array( $this, 'action_test' ), 10, 0 );
}
public function action_test() {
$this->write_file( 'in_method_with_action_call' );
}
public function write_file( $filename ) {
// assuming your wp-content dir is writeable
$counter = 1;
$fname = sprintf( WP_CONTENT_DIR . '/%s-%d.txt', $filename, $counter );
if ( file_exists( $fname ) ) {
preg_match( '/(\d)\.txt/is', $fname, $match );
if ( isset( $match[1] ) ) {
$counter = (int) $match[1] + 1;
$fname = sprintf( WP_CONTENT_DIR . '/%s-%d.txt', $filename, $counter );
}
}
$handle = fopen( $fname, 'a+' );
if ( $handle ) {
fputs( $handle, '-' );
fclose( $handle );
} else {
throw new Exception( "Cannot open file {$fname} for writing" );
}
}
}
add_action( 'plugins_loaded', function() { new Foo(); } );
আমি যদি আমার ডাব্লুপিপি-কন্টেন্ট দির দিকে তাকান তবে আমি দুটি ফাইল পেয়েছি। আর না. ক্লাস উদাহরণ তৈরি করা হলে একটি ফাইল তৈরি করা হয়। অ্যাকশন কল করা হয়ে গেলে একটি তৈরি করা হয়।
ঠিক আছে, আসুন আমাদের দৃষ্টান্ত সহ কিছু বোকা জিনিস করি। সরান add_action( 'plugins_loaded', .. )
এবং পরিবর্তে এই কোড যুক্ত করুন:
function bar( $foo ) {
$baz = $foo;
return $baz;
}
$f = new Foo();
$GLOBALS['foo'] = $f;
$f2 = $f;
$f3 = &$f;
$f4 = bar( $f2 );
$f5 = bar( $f3 );
আপনি কত ফাইল আশা করেন? আমি দুটি আশা করি। কন্সট্রাক্টর থেকে একটি, পদ্ধতি থেকে একজন।
new
অপারেটরটি ব্যবহৃত হলেই একটি নতুন উদাহরণ তৈরি করা হয়।
add_action( 'plugins_loaded', 'new_foo', 10, 0 );
function new_foo() {
// first instance
new Foo();
}
function bar( $foo ) {
$baz = $foo;
return $baz;
}
// second instance here!!
$f = new Foo();
$GLOBALS['foo'] = $f;
$f2 = $f;
$f3 = &$f;
$f4 = bar( $f2 );
$f5 = bar( $f3 );
এখন আমি চারটি ফাইল গণনা করছি। কনস্ট্রাক্টর থেকে দুটি এবং পদ্ধতি থেকে দুটি। এটি কারণ ওয়ার্ডপ্রেস প্রথমে প্লাগইন অন্তর্ভুক্ত এবং তারপরে অ্যাকশন হুক করুন plugins_loaded
।
সেরা অনুশীলন হ'ল plugins_loaded
ফাংশনটির বাইরে উদাহরণ তৈরি করার পরিবর্তে অ্যাকশন হুক ব্যবহার করা কারণ প্লাগিন ফাইলটি যে কোনও জায়গায় অন্তর্ভুক্ত করা হয় (উদাহরণস্বরূপ আপনার প্লাগইনের অন্য কোনও ফাইলের মধ্যে), ফাইলটি অন্তর্ভুক্ত করার সময় ক্লাসের একটি নতুন উদাহরণ তৈরি করা হয়। অ্যাকশন হুক plugins_loaded
প্রতিটি পৃষ্ঠার অনুরোধের জন্য একবার করা হয়।