Вы должны включать файл с определением класса в каждый файл, в котором он используется (и он должен быть включен до его использования).
<?php // filename: test.php
include_once("myClass.php");
$oClassInstance = myClass::Get();
var_dump($oClassInstance);
КСТАТИ
Вы не делаетенужно определить эти два метода Create
и Get
.Вы можете создать только один метод с именем getInstance
:
// only one instance of the class
private static $_oInstance = null;
public static function getInstace()
{
if (!self::$_oInstance)
{
self::$_oInstance = new self();
}
return self::$_oInstance;
}
И затем вы можете использовать его следующим образом:
<?php // filename: index.php
include_once("myClass.php");
// if instance does not exist yet then it will be created and returned
$oClass = myClass::getInstace();
<?php // filename: test.php
include_once("myClass.php");
// the instance already created and stored in myClass::$_oInstance variable
// so it just will be returned
$oClass = myClass::getInstance();
UPD
Если вам нужно поместить некоторые аргументы в конструктор, просто используйте предопределенные аргументы:
private function __construct($aArg)
{
// this code will be launched once when instance is created
// in the any other cases you'll return already created object
}
public static function getInstance($aArgs = null)
{
if (!self::$_oInstance)
{
self::$_oInstance = new self($aArgs);
}
return self::$_oInstance;
}
ОТВЕТ
Извините, что вам нужно прокрутить несколько экранов, чтобы найти это =))) Причина, по которой вы не можете использовать myClass::Get()
в своем контексте, состоит в том, что у вас есть 2 сценария, что означает - две разные программы.Singleton следует использовать в одном приложении (один скрипт).
Таким образом, в вашем случае правильное использование будет иметь модульную систему: - index.php - main.php - test.php
// file: index.php
include_once "myClass.php"
$module = $_GET["module"];
include_once $module ".php";
// file: main.php
$oClass = myClass::Create($someArgs);
var_dump($oClass); // you'll see you class body
// file: test.php
$oClass= myClass::Get();
var_dump($oClass); // you'll see the same class body as above
И ваши ссылки будут:
- index.php? Module = main
- index.php? Module = test