Php 帮助静态类成员

Php 帮助静态类成员,php,Php,我总是在课堂上使用$this。现在我不得不使用静态类,我迷路了。有人能告诉我如何将此转换为使用静态成员吗?我试过看一些教程,但它们不容易理解。我也不知道如何“实例化”一个静态类,所以如果有人能提供一个例子,我将不胜感激 谢谢 class db { private static $instance; private static $database_name; private static $database_user; private static $databa

我总是在课堂上使用$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;
    }
...
编辑:

另外,我真的很好奇使用静态类相对于可以在类外使用的类成员的优势。我会假设安全性,但仅此而已。

对于一个实例,您只会将
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);
    }

}

?>
此实例是一个常规对象-您可以正常(非静态)访问这些方法:


看起来您正在尝试创建一个与静态类稍有不同的单例-是吗?嗨,Greg,是的,这是一个单例模式。为什么必须使用静态属性?因为框架是为单例设置的,否则,我只需实例化该类并完成它。:)谢谢格雷格!在类外使用静态而不是实例化是否有优势?除了安全问题之外?它基本上是为了阻止你实例化其中的两个或更多-在有两个不好的东西时使用它:)Greg,我发布的其他类成员。。。我如何在课堂上使用它们?我如何引用它们?不需要它们是静态的-将它们转换为实例成员,然后您可以使用$this->xxx,或者如果它们是来自外部的公共$myInstance->xxx,我很抱歉,但我不知道如何做。我现在面临的问题是老会员。我通常会在构造函数中初始化它们,但现在不可能了。我还获得了“访问未声明的静态属性:db::$database\u link in”错误。此错误用于:return self::$instance的返回值
$myInstance = Example::getInstance();
$myInstance->bark();