0

是否可以从类实例中提取所有方法并在全局空间中使用它们?

说我有:

class Library {
  public function num_one() { echo "number one"; }
  public function num_two() { echo "number two"; }
}

加载类后,我希望能够在不指定实例的情况下使用函数

include '/path/to/library-class.php';
$lib = new Library();

#$lib->num_one();
#$lib->num_two();

num_one();
num_two();
4

2 回答 2

1

例如,您可以将它们设为静态

class Library {
    public static function num_one() { echo "number one"; }
    public static function num_two() { echo "number two"; }
}

那么你可以使用

Library::num_one()
Library::num_two()

你也不需要'$lib = new Library();' 然后行:)

于 2012-10-11T23:34:28.787 回答
0

我不确定您为什么需要这样做,因为 OOP 的优点之一是将方法安全地封装到命名空间中并防止函数名称发生冲突。

但是,如果您绝对需要这样做(并且我认为您可以并且应该以不必这样做的方式进行重构),则可以这样做;您可以将其添加到 /path/to/library-class.php:

class Library {
    public function num_one() { echo "number one"; }
    public function num_two() { echo "number two"; }
}

$global_Library = new Library();

function num_one ($whateverParameter) {
    global $global_Library;
    return $global_Library->num_one($whateverParameter);
}
// Continue adding your wrapper functions here.

我仍然认为使用静态方法比你要求做的更好,即使它们不应该被视为万灵药。

http://code.google.com/p/google-singleton-detector/wiki/WhySingletonsAreControversial

于 2012-10-11T23:34:38.830 回答