是否可以从类实例中提取所有方法并在全局空间中使用它们?
说我有:
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();
答案 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