我正在尝试db
类中添加Final
关键字以防止其他类中的某些查询函数。但是这个最后一个关键字给了我致命的错误。
Fatal error: Class user may not inherit from final class (db)
菲律宾代码
final class db{
private $connection;
public function __construct () {
$host = 'localhost';
$username = 'root';
$password = '';
$dbname = 'studentsyetem';
$this->connection = new mysqli($host, $username, $password, $dbname);
if ($this->connection->connect_error) {
die("Connection failed: " . $conn->connect_error);
}else{
echo 'Connected';
}
}
public function insert($u_name,$u_password,$u_level){
$sql = "INSERT INTO users (u_name, u_password, u_level, date_added) VALUES ('".$u_name."', '".$u_password."', '".$u_level."', '".date("Y-m-d H:i:s")."')";
mysqli_query($this->connection,$sql);
}
}
class user extends db{
public function child() {
echo 'user';
}
}
$user = new user();
echo $user->child();
如果没有final
关键字代码正常工作,我想知道我哪里做错了。任何人都可以指导我,我将不胜感激。
不能继承带有 final 关键字的类。任何子类都不应继承最终类。
只是为了向您展示一个例子,它解释了为什么会发生错误。 final
方法不能覆盖,也不能用abstract
覆盖,也不能用extends
但用trait
覆盖。
class foo {
final public function Func() {
echo "foo::Func() created";
}
}
class bar extends foo {
public function Func() {
echo "foo::Func() re-written"; // it fails
}
}