【发布时间】:2013-09-13 20:48:08
【问题描述】:
我对在抽象类中调用常用方法的正确方法有点困惑。使用以下代码:
abstract class Transaction {
abstract public function process();
abstract public function set_status();
protected function get_valid_statuses() {
return array(
'pending',
'approved'
);
}
}
class Purchase extends Transaction {
public function process() {
}
public function set_status( $status ) {
//check against valid statuses
$valid = Transaction::get_valid_statuses();
.......
}
}
显然,这段代码还远未完成,但对于本示例来说应该足够了。我想知道为什么会这样,因为我已经测试过了。在我的 Purchase 类中,当使用 set_status 方法时,我使用通常用于静态方法的范围解析运算符调用 get_valid_statuses() 方法。我会假设使用以下方法调用该方法:
$valid = Transaction->get_valid_statuses();
但我想这不会起作用,因为该类从未实际实例化。有人可以提供一些澄清。我无法从 PHP 文档中找到关于抽象类或范围解析运算符的理解。
谢谢!
【问题讨论】:
-
$this->get_valid_statuses()来自扩展类。parent::get_valid_statuses()如果你重载了它。 -
说的有道理,但是为什么上面的方法有效呢?
标签: php oop abstract-class static-methods