4

次のコードシナリオを検討してください。

<?php

//widgetfactory.class.php
// define a class
class WidgetFactory
{
  var $oink = 'moo';
}

?>


<?php

//this is index.php
include_once('widgetfactory.class.php');

// create a new object
//before creating object make sure that it already doesn't exist

if(!isset($WF))
{
$WF = new WidgetFactory();
}

?>

widgetfactoryクラスはwidgetfactoryclass.phpファイルにあります。このファイルをindex.phpファイルに含めました。すべてのサイトアクションはindex.phpを介して実行されます。つまり、このファイルが含まれるアクションごとに、widgetfactoryクラスのオブジェクトを作成します。すでに存在しない場合のみ。私はisset()この目的で使用していますが、これに代わるより良い方法はありますか?

4

2 に答える 2

7

グローバルを使用することは、これを達成する方法かもしれません。これを行う一般的な方法は、シングルトンインスタンスです。

class WidgetFactory {
   private static $instance = NULL;

   static public function getInstance()
   {
      if (self::$instance === NULL)
         self::$instance = new WidgetFactory();
      return self::$instance;
   }

   /*
    * Protected CTOR
    */
   protected function __construct()
   {
   }
}

その後、グローバル変数をチェックする代わりに$WF、次のようにインスタンスを取得できます。

$WF = WidgetFactory::getInstance();

のコンストラクターは、インスタンスがそれ自体でのみ作成できるようにするためにWidgetFactory宣言されています。protectedWidgetFactory

于 2012-04-05T21:18:28.933 に答える
5

これでうまくいくはずです:

if ( ($obj instanceof MyClass) != true ) {
    $obj = new MyClass();
}
于 2012-09-11T08:39:51.550 に答える