php类中有些方法只有方法名,没写内容

一般都是MVC比较底层的类里会出现这种方法,搞不清楚这个事干嘛用的。是为了覆盖方法吗?还是只做定义用?

public function isRegistered($userId);

貌似前置声明,似乎可以用不用

应该就是前置声明,以前从来没注意过啊

那是调用库中函数的声明,不然你不能用的,还可能造成问题,
底层那个类接口文件一般是由底层去修改的,顶层不用问事
具体的实现方式,是C/C++写在库里的,不用问事,而且你也看不到

不要断章取义!

 abstract class a {
  abstract public function isRegistered($userId);
}

抽象函数的抽象方法才可以这么写

你说的应该是抽象方法,这个方法是先定义,后面再去具体实现的,相当于建房子,先把支架搭好,然后再添砖加瓦!

抽象类的抽象方法吧,那是需要继承类去实现方法内容的。所以只需要声明继承的类需要实现方法的内容。

<?php
abstract class AbstractClass
{
// 强制要求子类定义这些方法
abstract protected function getValue();
abstract protected function prefixValue($prefix);

// 普通方法(非抽象方法)
public function printOut() {
    print $this->getValue() . " ";
}

}

class ConcreteClass1 extends AbstractClass
{
protected function getValue() {
return "ConcreteClass1";
}

public function prefixValue($prefix) {
    return "{$prefix}ConcreteClass1";
}

}

class ConcreteClass2 extends AbstractClass
{
public function getValue() {
return "ConcreteClass2";
}

public function prefixValue($prefix) {
    return "{$prefix}ConcreteClass2";
}

}

$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') ." ";

$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') ." ";
?>
以上例程会输出:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
抽象类的子类中的普通方法执行方式和其他类相同。