致命错误:从无效上下文调用私有MyObject :: __ construct()

Bri*_*ian 14 php

在PHP中创建一个新对象时,我收到以下错误消息:
Fatal error: Call to private MyObject::__construct() from invalid context
我只是创建新对象,不要尝试显式调用构造函数.有谁知道发生了什么?

zom*_*bat 29

您的MyObject类具有受保护或私有构造函数,这意味着该类无法实例化. __construct()在实例化对象时总是调用函数,因此尝试执行类似操作$x = new MyObject()会导致私有构造函数出现致命错误.(如果没有专门声明__construct()函数,将调用父构造函数).

私有构造函数通常在Singleton类中使用,以防止对象的直接实例化.如果它不是你构建的类,它可能有一个getInstance()可用的函数(或类似的东西)来返回它自己的实例.

  • 这样做的唯一原因是,如果您不希望由于某种原因实例化该类.正如我在答案中提到的,Singleton模式是你可能会这样做的一个流行的原因(http://en.wikipedia.org/wiki/Singleton_pattern). (2认同)
  • 私有构造函数通常由单例模式的 PHP 实现使用,有时与工厂一起使用。例如,类的工厂静态方法可以搜索本地缓存的对象实例并返回引用而不是新对象。将构造函数设为私有将防止任何意外绕过工厂方法。 (2认同)