একটি প্লাগইন লাইফ চক্র ডকুমেন্টেশন আছে?


11

কোথাও এমন কোনও ডকুমেন্টেশন রয়েছে যা প্লাগিনগুলির জীবনচক্রটি কী তা ব্যাখ্যা করে?

আমি ওওপি শৈলীতে একটি নতুন প্লাগইন শুরু করছি, এবং আমি সবেমাত্র জানতে পেরেছি যে আমার প্রধান শ্রেণিটি প্রচুর পরিমাণে ইনস্ট্যান্ট করা হচ্ছে (এক্সডিবুগ এবং নেটবিন্সকে ধন্যবাদ)।
আমি অবাক হয়েছি কেন এবং এটি আমাকে বিরক্ত করে কারণ আমি একটি ড্রপবক্স-এপিআই অবজেক্টটি ইনস্ট্যান্ট করছি, এবং আমি সত্যিই ভাবিনি যে ওয়ার্ডপ্রেস কেবল আমার মূল শ্রেণিকে এতটা প্রশমিত করবে।

কোডেক্সে বা গুগলে প্লাগইনগুলির জীবনচক্র সম্পর্কিত কোনও কিছুই আমি পাইনি।


এবং এখানে, আপনি এখানে অনুসন্ধান করেছেন ? :)
brasofilo

20
ট্যাগ: সবসময় একটি Singleton যেমন আপনার বর্গ বর্ণনা করতে পারেন stackoverflow.com/questions/203336/...
Bainternet

1
ধন্যবাদ। আমি 'সেরা অনুশীলন' সম্পর্কে ভাবি নি। কোডিং গাইডলাইনস সহ কোডেক্সে আমি প্রচুর জিনিস পড়েছি তবে এটি এখানে নেই .. তখন সিঙ্গলটনের চেষ্টা করব, কিন্তু তবুও, আমি আশ্চর্যজনক মনে করি যে প্লাগইন পিএইচপি একাধিকবার বলা হয় .. না? বেন্টারনেট আপনার স্বয়ংসম্পূর্ণতা সম্পর্কে সতর্ক থাকুন :)
রিটনলাজাই

brasofilo, একটি একক তৈরি করা সাহায্য করবে কিন্তু এই প্রশ্নের উত্তর দেয় না যা হ'ল: আমার প্লাগইনটির ভিতরে কোডটি কেন একাধিকবার চলে? আপনার লিঙ্ক করা URL এর ওও ক্লাসটি ঠিক তাই করছে যা করছে
RitonLaJoie

2
সবেমাত্র প্রশ্নটি +1 করতে হয়েছিল। কেবল মন্তব্য এবং অগ্রগতির জন্য: ডি
কায়সার

উত্তর:


3

আমি ওওপি স্টাইলে একটি নতুন প্লাগইন শুরু করছি

'ওওপি শৈলী' আপনার জন্য কী বোঝায়? শ্রেণীর বিবৃতি দিয়ে আপনার সমস্ত ফাংশন মোড়ানো? তাহলে আপনি এটা ভুল করছেন। আপনি ক্লাসটি নামস্থান হিসাবে মিস করেছেন।

এবং আমি সবেমাত্র জানতে পেরেছি যে আমার মূল শ্রেণিটি প্রচুর পরিমাণে ইনস্ট্যান্ট করা হচ্ছে

তাই না?

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প্রতিটি পৃষ্ঠার অনুরোধের জন্য একবার করা হয়।


0

যা ঘটতে পারে তা হ'ল আপনি নিজের ক্লাসের একটি অনুলিপি একটি ফিল্টার বা ক্রিয়াকলাপে প্রেরণ করেন। উদাহরণস্বরূপ, আপনি যদি কোনও হুকের মধ্যে ক্লাসের ভেরিয়েবলগুলি সরাসরি পরিবর্তন করতে চান বা ফিল্টার করতে চান তবে আপনার অবশ্যই হুকটি রেফারেন্সের মাধ্যমে পাস করতে হবে

add_action("some_action",array(&$this,"somefunction"))

পরিবর্তে

add_action("some_action",array($this,"somefunction"))

বেন্টারনেট দ্বারা উল্লিখিত হিসাবে আপনি কোনও নির্দিষ্ট বস্তুটি একবারে ইনস্ট্যান্সিয়ড করা হয়েছে তা নিশ্চিত করতে আপনি একটি একক প্যাটার্নও ব্যবহার করতে পারেন (আরও কলগুলি সেই বস্তুর রেফারেন্স ফিরিয়ে দেয়)।

আপনি কিছু ফাংশনকে স্থিতিশীল করার বিষয়েও বিবেচনা করতে পারেন (তাদের স্থির কীওয়ার্ড দিয়ে।

আপনি অ্যাকশন / ফিল্টারগুলিতে স্থির ফাংশনগুলিও পাস করতে পারেন:

add_action("some_action",array("ClassName","Method"))

আমি http://codex.wordpress.org/ প্লাগিন_এপিআই / অ্যাকশন_রফারেন্সও পরীক্ষা করে দেখেছি যে প্লাগইনগুলি কেবলমাত্র অনুরোধে দুটি পর্যায়ে লোড করা যায় (মুপলগিনসলোড এবং প্লাগিন_লোড) ed


3
যখন কোনও বস্তু আর্গুমেন্টের মাধ্যমে প্রেরণ করা হয়, ফেরত দেওয়া হয় বা অন্য কোনও ভেরিয়েবলের কাছে বরাদ্দ করা হয়, তখন বিভিন্ন ভেরিয়েবলের উপকরণ নয়: এগুলি সনাক্তকারীটির একটি অনুলিপি রাখে, যা একই বস্তুকে নির্দেশ করে। পিএইচপি ম্যানুয়াল থেকে । অ্যাকশন কল বা ফিল্টারে ক্লাসটি আর্গুমেন্ট হিসাবে প্রেরণ করা হয়। পিএইচপি 5 যেহেতু রেফারেন্স হিসাবে এটি পাস করার প্রয়োজন নেই।
রালফ 912

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