Php OOP单例验证,以查看它是否';不能创建多个实例

Php OOP单例验证,以查看它是否';不能创建多个实例,php,oop,singleton,Php,Oop,Singleton,我已经在下面创建了Singleton类,但如何知道只创建了一个实例呢。如何测试它?另外,self::$instance=new FileProcessor()和self::$instance=new static()之间有什么区别吗?或者我应该使用哪一个 谢谢 课程 class FileProcessor { protected static $instance = null; public static function get_instance() {

我已经在下面创建了Singleton类,但如何知道只创建了一个实例呢。如何测试它?另外,
self::$instance=new FileProcessor()
self::$instance=new static()
之间有什么区别吗?或者我应该使用哪一个

谢谢

课程

class FileProcessor
{
    protected static $instance = null;

    public static function get_instance()
    {
        if (self::$instance === null)
        {
            self::$instance = new FileProcessor();
            //self::$instance = new static();
        }

        return self::$instance;
    }
}

$obj_1 = FileProcessor::get_instance();
echo '<pre>'; print_r($obj_1);

$obj_2 = FileProcessor::get_instance();
echo '<pre>'; print_r($obj_2);

您可以使用
==
运算符比较结果。就你而言:
$obj_1===$obj_2
将返回
true
如果两个对象引用同一实例。更多信息请点击此处:。这里还有一个关于使用
newstatic()
的很好的解释:

您可以使用
=
操作符来比较结果。就你而言:
$obj_1===$obj_2
将返回
true
如果两个对象引用同一实例。更多信息请点击此处:。这里还对如何使用
newstatic()

var\u dump函数进行了很好的解释,该函数允许您查看对象的内容。 此代码演示了对象实际上是相同的:

function foo(FileProcessor $fp) {
    ...
}

var_dump函数允许您查看对象的内容。 此代码演示了对象实际上是相同的:

function foo(FileProcessor $fp) {
    ...
}

理想情况下,您一开始不会使用单例模式。相反,您需要将
FileProcessor
的实例注入到所有需要它的东西中。这意味着应用程序中所有需要
FileProcessor
的地方都不会“自己获取”,而是从更高的权威机构获取。而不是:

你可以:


这允许您仅实例化一个
文件处理器
,并将其注入到任何需要的地方。这使您可以完全控制它的使用。您可以将其与注册表/依赖项注入容器模式相结合,以使管理依赖项变得更容易。

理想情况下,您不会首先使用单例模式。相反,您需要将
FileProcessor
的实例注入到所有需要它的东西中。这意味着应用程序中所有需要
FileProcessor
的地方都不会“自己获取”,而是从更高的权威机构获取。而不是:

你可以:


这允许您仅实例化一个
文件处理器
,并将其注入到任何需要的地方。这使您可以完全控制它的使用。您可以将其与注册表/依赖项注入容器模式相结合,以使管理依赖项更容易。

感谢您的关注。为了使用第二个函数,我如何更改我的示例?您展示的所有代码都是关于实例化单例的。你基本上删除了所有这些。然后只留下一个
$obj_1=新的文件处理器
并将该
$obj_1
传递给每个需要它的函数和类。顺便说一句,您可能还对以下内容感兴趣:那么它是这样的吗?
类文件处理器{//Whatever}$obj=new FileProcessor;函数foo($obj){echo';var_dump($obj);}foo($obj)完全正确。如我的回答所示,我还要将类型提示
FileProcessor$obj
添加到
函数foo
。谢谢你睁开我的眼睛。为了使用第二个函数,我如何更改我的示例?您展示的所有代码都是关于实例化单例的。你基本上删除了所有这些。然后只留下一个
$obj_1=新的文件处理器
并将该
$obj_1
传递给每个需要它的函数和类。顺便说一句,您可能还对以下内容感兴趣:那么它是这样的吗?
类文件处理器{//Whatever}$obj=new FileProcessor;函数foo($obj){echo';var_dump($obj);}foo($obj)完全正确。如我的回答所示,我还要将类型提示
FileProcessor$obj
添加到
函数foo
,谢谢您的示例+1感谢这个例子+1感谢链接以查看差异+1感谢链接以查看差异+1.
function foo() {
    $fp = FileProcessor::getInstance();
    ...
}
function foo(FileProcessor $fp) {
    ...
}