Php 单身汉不';不适用于静态函数
系统的另一部分导致问题,问题已解决Php 单身汉不';不适用于静态函数,php,singleton,Php,Singleton,系统的另一部分导致问题,问题已解决 public static function getParticpantsIdsWithTitles(array $proftitlecodes) { //connect_mysqli is a singleton, but everytime this is called a new instance is created $sqlconn = connect_mysqli::get_instance(); } //All of thes
public static function getParticpantsIdsWithTitles(array $proftitlecodes)
{
//connect_mysqli is a singleton, but everytime this is called a new instance is created
$sqlconn = connect_mysqli::get_instance();
}
//All of these method calls cause the constructor of connect_mysqli to run
Participant::getParticpantsIdsWithTitles(array(1,2,3));
Participant::getParticpantsIdsWithTitles(array(1,2,3));
从静态函数使用单例时,是否有一些规则我不知道?每次都会创建一个新的mysqli_对象。(仅来自静态函数)。它在非静态函数中工作良好
private static $instance = FALSE;
var $host ;
var $dbUser ;
var $dbPass ;
var $dbName ;
var $dbConn ;
var $dbconnectError ;
var $query;
var $result;
var $row;
function __construct ()
{
$this->host = 'host' ;
$this->dbUser = 'user' ;
$this->dbPass = 'password' ;
$this->dbName = 'db' ;
$this->dbConn = new mysqli($this->host , $this->dbUser , $this->dbPass, $this->dbName ) ;
file_put_contents("/Library/WebServer/Documents/test.txt", "CONNECT\n", FILE_APPEND);
if ( !$this->dbConn )
{
trigger_error ('could not connect to server' ) ;
$this->dbconnectError = true ;
}
}
public static function get_instance()
{
if(!self::$instance)
{
self::$instance = new connect_mysqli();
}
return self::$instance;
}
我无法重现你的问题。下面的代码打印 创建了一个新的connect_mysqli 就一次
class foo
{
public static function getParticpantsIdsWithTitles(array $proftitlecodes)
{
$sqlconn = connect_mysqli::get_instance();
}
}
class connect_mysqli
{
private static $instance = FALSE;
public function __construct()
{
echo "A new connect_mysqli was created\n";
}
public static function get_instance()
{
if(!self::$instance)
{
self::$instance = new connect_mysqli();
}
return self::$instance;
}
}
for ($i = 0; $i < 10; ++$i)
{
foo::getParticpantsIdsWithTitles(array());
}
class-foo
{
公共静态函数getParticpantsIdsWithTitles(数组$ProftTitleCodes)
{
$sqlconn=connect_mysqli::get_instance();
}
}
类连接\u mysqli
{
私有静态$instance=FALSE;
公共函数构造()
{
echo“创建了一个新的connect\u mysqli\n”;
}
公共静态函数get_instance()
{
如果(!self::$instance)
{
self::$instance=newconnect_mysqli();
}
返回self::$instance;
}
}
对于($i=0;$i<10;++$i)
{
foo::getParticpantsIdsWithTitles(数组());
}
我无法重现您的问题,但我确实注意到您的单身问题:
function __construct ()
这将默认\u construct()
方法为public
可见性。通常,单例的构造函数将标记为private
,以防止在提供的get\u instance()
方法之外实例化
您确定只使用了
get\u instance()
,而从未执行过类似$mysqli=new connect\u mysqli()
的操作吗?您还确定您没有从singleton之外的上下文创建db连接吗?请提供一个自包含的最小示例。getParticpantsIdsWithTitles有自己的示例class@ChrisMuench说明了。还是没问题。