对OOP不熟悉,如何将类公共变量设置为全局变量以用于静态方法?

Cof*_*ker 2 php oop

我写了一个类来设置和过期浏览器cookie.我试图将类公共变量设置为全局变量的值,以允许我静态使用类方法.基本上我想要做的就是删除重复的全局$settings$expire$domain变量.

这是我的代码:

<?php

    class cookies {
        public static function set($name, $value, $date = false) {
            global $settings;

            $expire = ($date) ? $date : $settings['expire'];
            $domain = str_replace('www.', '', $settings['domain']);
            setcookie($name, $value, $expire, '/', $domain);
        }

        public static function clear() {
            global $settings;

            $domain = str_replace('www.', '', $settings['domain']);
            setcookie('test1', '', 1, '/', $domain);
            setcookie('test2', '', 1, '/', $domain);
        }
    }

?>
Run Code Online (Sandbox Code Playgroud)

dec*_*eze 7

使用全局变量对于应用程序的灵活性,模块性和健全性非常不利.使用静态方法对于应用程序的模块化和灵活性非常不利.将两者结合使用是令人厌恶的.你怎么写一个可以像这样使用的类:

$cookies = new Cookies($settings['expire'], $settings['domain']);
$cookies->set(.., .., ..);
$cookies->clear();
Run Code Online (Sandbox Code Playgroud)

你会从这样一个合适的类结构开始:

class Cookies {

    protected $expire,
              $domain;

    public function __construct($expire, $domain) {
        $this->expire = $expire;
        $this->domain = $domain;
    }

    ...

}
Run Code Online (Sandbox Code Playgroud)

然后你使用$this->expire$this->domain不是全局变量.