final关键字防止该类被其他类扩展,例如:
class Parent
{
}
class Mother extends Parent
{
}
final class Brother extends Mother /* - This class cannot be extended - */
{
}
class Pet extends Brother
{
}
Pet 类将抛出错误声明:Fatal error: Class Pet may not inherit from final class (Brother)
这也适用于方法,因此如果您不想让方法被继承,从而导致子类具有相同的方法作为覆盖。
http://php.net/manual/en/language.oop5.final.php
你曾经说过你想要一些真实世界的例子来说明接口可以用于什么,以及数据库抽象层
您有 1 个基类,它提供了迭代数据库数据的基本方法,但这将使用数据库类型的子类,例如 MySql、MsSql 等,每种数据库类型都有自己的类,但基类要确保它具有这些方法,它们都将实现相同的接口。
例子
interface IDatabaseLayer
{
public function connect();
public function query();
public function sanitize();
//...
}
所以基类知道MySql和MsSql有上述方法,从而减少错误,更有条理。
在将对象传递给类时,您希望确保该对象属于某种类型,PHP5 允许您定义应将哪种类型的对象作为参数传递给方法。
假设你有 3 个课程
DatabaseCredentials
DatabaseConnection
DatabaseQuery
您可以在 DatabaseConnection 的构造中明确定义您需要一个 DatabaseCredentials 类,如下所示:
class DatabaseConnection implements Connectable
{
public function __construct(DatabaseCredentials $ConnectionDetails)
{
$this->Connect($ConnectionDetails->BuildDSN());
}
}
真正入门的好方法是阅读此处:
您可能希望了解的 PHP5 的另一个特性是名称空间,这将使您的代码保持井井有条,拥有多个同名对象,使自动加载更有效
小例子:
namespace Database\MySql
{
class Database{}
}
namespace Database\MsSql
{
class Database{}
}
你可以像这样使用:
use Database;
$Database = new MySql\Database();