在php的全局空间中使用类函数?

时间:2012-10-11 23:28:34

标签: php

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

说我有:

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();

2 个答案:

答案 0 :(得分: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();'然后:)

答案 1 :(得分: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