鉴于我有一个抽象类:
abstract class User{
private function getNumber(){
return 'Get number';
}
}
使用子类
class UserComments extends User{
public function rows(){
return $this->getNumberOfRows();
}
}
问题:
当我尝试在子类中调用getNumber
方法时,或者当我在子类中调用getNumberOfRows
我想要getNumberOfRows()
时,有没有办法调用getNumber
函数被称为
?
答案 0 :(得分:1)
由于PHP Object inheritance,您可以直接调用特定方法。但是,在您的示例中,缺少getNumberOfRows()
函数。
class UserComments extends User {
public function rows() {
return $this->getNumber();
}
}
答案 1 :(得分:1)
你可以做这样的事情
abstract class User{
private function getNumber(){
return 'Get number';
}
public function getNumberOfRows(){
return $this->getNumber();
}
}
使用子类
class UserComments extends User{
public function rows(){
return $this->getNumberOfRows(); //Defined in the parent class
}
}
答案 2 :(得分:1)
抽象方法不能是私有的,抽象方法必须由派生它的类实现。
您可以使用public
,或者如果您不希望它在外面可见,请将其设为protected
,如下所示:
abstract class User{
abstract protected function getNumber();
}
执行此操作后,您可以在getNumber
课程中实施User
方法:
class User {
protected function getNumber() {
// Do something
}
}
更新:请注意,子类可以访问受保护的方法,您可以使用"层次结构":
abstract class User{
abstract protected function getNumber();
}
class UserComment extends User {
protected function comment() {
// Do something
}
protected function getNumber() {
return 3;
}
}
class Post extends UserComment {
public function myMethod() {
echo $this->getNumber();
}
}
您也可以使用interfaces
,只是一个例子:
interface User {
public function getNumber();
}
class UserComment {
protected function myMethod() {
// Do something
}
}
class Post extends UserComment implements User {
final public function getNumber() {
return 3;
}
public function myMethod() {
echo $this->getNumber();
}
}
$post = new Post();
$post->myMethod();