我一直在课堂上使用$ this。现在我必须使用静态类,我迷路了。有人可以告诉我如何将其转换为使用静态成员吗?我试过看一些教程,但不容易理解。我也不知道如何“实例化”静态类,所以如果有人可以提供一个例子,我将不胜感激。
感谢。
class db
{
private static $instance;
private static $database_name;
private static $database_user;
private static $database_pass;
private static $database_host;
private static $database_link;
private function db()
{
self::$database_name = "name";
self::$database_user = "user";
self::$database_pass = "password";
self::$database_host = "host";
}
public static function getInstance()
{
if (!self::$instance)
{
?????
self::$instance = connect();
return self::$database_link;
}
return self::$instance;
}
function dbLink()
{
self::$connect();
return self::$database_link;
}
...
编辑:
另外,我真的很好奇使用静态类而不是可以在类外使用的类成员。我会假设安全,但就是这样。
答案 0 :(得分:2)
对于singleton,您只能将getInstance()
方法设为静态。
关键是使构造函数成为私有的,这样除了在getInstance()
之外的任何地方都不能构造类;来自手册:
<?php
class Example
{
// Hold an instance of the class
private static $instance;
// A private constructor; prevents direct creation of object
private function __construct()
{
echo 'I am constructed';
}
// The singleton method
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
// Example method
public function bark()
{
echo 'Woof!';
}
// Prevent users to clone the instance
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
}
?>
单例模式确保您只有一个东西 - 例如数据库连接 - 创建起来可能很昂贵。
你的实例是这样的:
$myInstance = Example::getInstance();
此实例是常规对象 - 您可以正常(非静态)访问方法:
$myInstance->bark();