2012-04-05 2 views
3

рассмотрим следующий код сценария:Как проверить, существует ли объект класса уже на PHP?

<?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(), есть ли другая альтернатива?

+0

Это 'одиночки': http://php.net/manual/en/language.oop5.patterns.php (см пример # 2) –

+0

HTTP : //us2.php.net/manual/en/function.class-exists.php – j08691

+0

@ j08691 Я полагаю, что class_exist() не поможет этому случаю, так как я хочу проверить, существует ли объект или нет, а не класс – Rahul

ответ

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 объявляется protected, чтобы убедиться, что экземпляры могут быть созданы только WidgetFactory.

5

Это должно сделать работу:

if (($obj instanceof MyClass) != true) { 
    $obj = new MyClass(); 
} 
Смежные вопросы