💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
定义为抽象的类可能无法直接被实例化,任何一个类, 如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。如果类方法被声明为抽象的, 那么其中就不能包括具体的功能实现。 编辑`/home/project/abstract.php` ~~~php <?php abstract class Say { abstract public function sayHello($word); abstract public function sayHi(); } class Speak extends Say { public function sayHello($word) { echo "Hello $word"; } public function sayHi() { echo "Hi".PHP_EOL; } } $s = new Speak(); $s->sayHi(); $s->sayHello("World"); ~~~ 执行 ~~~bash php abstract.php ~~~ 从结果可以看出 * 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法。例如,在类 Speak 中移除方法 sayHi(),结果为 ~~~bash Fatal error: Class Speak contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Say::sayHi)... ~~~ * 这些方法的访问控制必须和父类中一样(或者更为宽松)。例如,在类 Speak 中 sayHi() 声明为 protected,则报错 ~~~bash Fatal error: Access level to Speak::sayHi() must be public (as in class Say)... ~~~ * 此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,移除抽象方法 sayHello() 中的参数,则 ~~~bash Fatal error: Declaration of Speak::sayHello($word) must be compatible with Say::sayHello()... ~~~