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