AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
定义为抽象的类可能无法直接被实例化,任何一个类, 如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。如果类方法被声明为抽象的, 那么其中就不能包括具体的功能实现。 编辑`/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()... ~~~